एक SQL नल एक .NET नल के समान नहीं है; आपको System.DBNull.Value से तुलना करनी होगी:
object sqlDateTime = sqldatareader[0];
DateTime? dt = (sqlDateTime == System.DBNull.Value)
? (DateTime?)null
: Convert.ToDateTime(sqlDateTime);
आपकी टिप्पणी के उत्तर में, Item
. का डेटा प्रकार DataReader
. की संपत्ति अंतर्निहित डेटाबेस प्रकार का है। यह System.Data.SqlTypes.SqlDateTime
हो सकता है एक गैर-शून्य SQL सर्वर डेटाबेस के लिए, या System.DBNull
एक नल कॉलम के लिए, या System.Data.Odbc.OdbcTypes.SmallDateTime
एक ओडीबीसी डेटाबेस के लिए, या वास्तव में बस कुछ भी। केवल एक चीज जिस पर आप भरोसा कर सकते हैं, वह यह है कि यह object
. प्रकार की है ।
यही कारण है कि मैं Convert.ToDateTime()
. का उपयोग करने का सुझाव देता हूं DateTime
. के लिए जबरदस्ती टाइप करने के बजाय . इस बात की कोई गारंटी नहीं है कि ODBC या किसी भी दिनांक कॉलम को .NET DateTime
के लिए बाध्य किया जा सकता है। . मैंने नोट किया है कि आपकी टिप्पणी एक "sqldatareader" और एक SQL सर्वर System.Data.SqlTypes.SqlDateTime
निर्दिष्ट करती है। वास्तव में एक System.DateTime
. के लिए मजबूर किया जा सकता है , लेकिन आपके मूल प्रश्न ने हमें यह नहीं बताया।
DataReader
का उपयोग करने के बारे में अधिक जानकारी के लिए एस, एमएसडीएन से परामर्श लें।