2014-06-07 12 views
14

मैं एक साधारण क्वेरी का उपयोग कर डेटाबेस से उपयोगकर्ता की जानकारी पुनर्प्राप्त कर रहा हूं।SqlDataReader के साथ थोड़ा सा मूल्य कैसे प्राप्त करें और इसे बूल में परिवर्तित करें?

select * from dbo.[User] u where u.Email = @email 

मैं तो एक स्तंभ का मान, IsConfirmed (जो डेटाबेस में एक सा प्रकार स्तंभ के रूप में प्रस्तुत किया जाता है) कहा जाता हो और bool करने के लिए इसे बदलने की कोशिश।

bool isConfirmed = int.Parse(sqlDataReader["IsConfirmed"].ToString()) == 1; 

मैं तो एक FormatException त्रुटि प्राप्त करते हुए कहा कि "इनपुट स्ट्रिंग एक सही स्वरूप में नहीं था।"।

मैं एक जवाब के लिए इस कोड को उपलब्ध कराने के साथ एक समान प्रश्न देखा:

bool isConfirmed = sqlDataReader.GetBoolean(0); 

लेकिन यह मेरे मामले के साथ काम नहीं करेगा, क्योंकि मैं IsConfirmed स्तंभ के सूचकांक पता नहीं है और मुझे नहीं पता इसे जानना चाहते हैं। मैं कॉलम नाम का उपयोग करना चाहता हूँ।

उत्तर

16

डेटा रीडर इंडेक्सर संपत्ति से लौटाया गया मान टाइप ऑब्जेक्ट का है लेकिन इसे डेटा प्रकार में डाला जा सकता है जिसे इसे संग्रहीत किया गया है।

इस प्रयास करें:

bool isConfirmed = (bool)sqlDataReader["IsConfirmed"] 
9

आप स्तंभ नाम का उपयोग करना चाहते हैं तो आप उपयोग कर सकते

bool isConfirmed = sqlDataReader.GetBoolean(sqlDataReader.GetOrdinal("IsConfirmed")); 
3

आपका कोड काम करना चाहिए अगर आप अपने स्तंभ IsConfirmed में किसी भी शून्य मान नहीं है।
आमतौर पर इन बिट कॉलम में कोई पूर्ण संपत्ति नहीं है और/या 0 का डिफ़ॉल्ट मान नहीं है, लेकिन यह शून्य मान हो सकता है और, इस मामले में, आपका कोड उल्लिखित त्रुटि से असफल हो जाएगा।

आप इस तरह से इसे ठीक कर सकता है

int colPos = sqlDataReader.GetOrdinal("IsConfirmed"); 
bool isConfirmed = sqlDataReader.IsDBNull(colPos) ? false : sqlDataReader.GetBoolean(colPos)); 

तुम सच में कॉलम स्थिति आप एक विस्तार विधि बना सकते हैं खोजने के लिए एक कॉल के लिए नापसंद हैं (आप स्तंभ की स्थिति इस चेक तथापि के लिए की आवश्यकता होगी) कि छिपाने कॉल

public static class ReaderExtensions 
{ 
    public static bool IsDBNull(this SqlDataReader reader, string colName) 
    { 
     int colPos = reader.GetOrdinal(colName); 
     return reader.IsDBNull(colPos); 
    } 
} 

की अनुमति और

bool isConfirmed = int.Parse((sqlDataReader.IsDBNull("IsConfirmed") 
        ? "0" : sqlDataReader["IsConfirmed"].ToString())) == 1; 
से कॉल करने की
+0

त्रुटि मामलों को संभालने के लिए यह सबसे गहन और पूर्ण उत्तर है। +1 – Ant

संबंधित मुद्दे