DbCommand.ExecuteScalar के लिए MSDN दस्तावेज़ के अनुसार:
<ब्लॉककोट>यदि परिणाम सेट में पहली पंक्ति का पहला कॉलम नहीं मिलता है, तो एनल रेफरेंस (विजुअल बेसिक में कुछ भी नहीं) दिया जाता है। यदि डेटाबेस में मान शून्य है, तो क्वेरी DBNull.Value लौटाती है।
निम्नलिखित स्निपेट पर विचार करें:
using (var conn = new OracleConnection(...)) {
conn.Open();
var command = conn.CreateCommand();
command.CommandText = "select username from usermst where userid=2";
string getusername = (string)command.ExecuteScalar();
}
रन-टाइम पर (ODP.NET के तहत परीक्षण किया गया लेकिन किसी भी ADO.NET प्रदाता के तहत समान होना चाहिए), यह इस तरह व्यवहार करता है:
- यदि पंक्ति मौजूद नहीं है, तो
command.ExecuteScalar()
का परिणाम है शून्य है, जिसे बाद में एक नल स्ट्रिंग में डाला जाता है औरgetusername
. को असाइन किया जाता है । - यदि पंक्ति मौजूद है, लेकिन उपयोगकर्ता नाम में NULL है (क्या यह आपके DB में भी संभव है?),
command.ExecuteScalar()
का परिणाम है। हैDBNull.Value
, जिसके परिणामस्वरूप एकInvalidCastException
. है ।
किसी भी स्थिति में, NullReferenceException
संभव नहीं होना चाहिए, इसलिए आपकी समस्या शायद कहीं और है।