अंततः यह System.Data.IDataReader
की विशेष कार्यान्वयन आप बात कर रहे हैं पर निर्भर करता है मिल , लेकिन मान लें कि आपका मतलब System.Data.SqlClient.SqlDataReader
है।
इस मामले में, reader[i]
और reader.GetValue(i)
ठीक एक ही चीज़ है। वास्तव में, reader[i]
आंतरिक रूप से reader.GetValue(i)
पर कॉल करता है। (आप इसे ILSpy जैसे टूल का उपयोग करके कोड को अलग करके देख सकते हैं।)। ये दोनों सदस्य वर्तमान पंक्ति के i-th कॉलम में मान वापस कर देते हैं और मूल्य के प्रकार के बावजूद सफलतापूर्वक वापस आ जाएंगे (वापसी का प्रकार object
है)। इन दोनों सदस्यों के लिए प्रलेखन थोड़ा भ्रामक है और इसे बेहतर तरीके से कहा जा सकता है। आप जहां भी चाहें इन सदस्यों में से किसी एक का उपयोग कर सकते हैं, बस वह चुनें जिसे आप बेहतर पढ़ते हैं।
जबकि reader.GetString(i)
विशेष रूप से string
के रूप में वर्तमान पंक्ति के i-th कॉलम में निहित मान को वापस करने के लिए डिज़ाइन किया गया है। यदि उस कॉलम में मान string
नहीं है, तो InvalidCastException
फेंक दिया जाएगा। इस विधि का उपयोग करें जब आप सुनिश्चित हों कि मान string
और string
वह प्रकार है जिसे आप काम करना चाहते हैं। इससे आपका कोड अधिक संक्षिप्त हो जाएगा क्योंकि आपको कलाकार नहीं करना होगा।
आपके विशिष्ट मामले में, वर्तमान पंक्ति के i-th कॉलम में मान string
प्रकार होना चाहिए, यही कारण है कि सभी तीन सदस्यों का वापसी मूल्य समान है।
यदि सही ढंग से लिखा गया है, तो System.Data.IDataReader
के अन्य कार्यान्वयन समान तरीके से व्यवहार करना चाहिए।
स्रोत
2011-12-08 20:42:07
भयानक किनारे के मामले हैं, जहां 'GetValue' एक' बाइट 'देता है, लेकिन 'GetInt32' एक इंट 32 –
पर बाइट डालने में असमर्थ है, यह कहना मुश्किल है (विशेष रूप से क्योंकि असंबद्ध कोड का पालन करना मुश्किल है) लेकिन यह प्रतीत होता है कि कॉलम में मान पहले से वांछित प्रकार का होना चाहिए अन्यथा अमान्यकास्टएक्सप्शन (जो स्वयं ही थोड़ा भ्रामक है) फेंक दिया जाएगा। मैं जवाब संपादित कर दूंगा। –
वास्तव में, GetInt32 (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getint32.aspx) के लिए प्रलेखन बताता है कि "कोई रूपांतरण नहीं किया जाता है, इसलिए, डेटा पुनर्प्राप्त किया जाना चाहिए पहले से ही 32-बिट हस्ताक्षरित पूर्णांक हो। " अन्य GetXXX विधियों को समान रूप से दस्तावेज किया गया है। –