2010-11-11 17 views
15

की ऑपरेंड के लिए लागू नहीं किया जा सकता मैं निम्नलिखित सी # कोड है:ऑपरेटर '??' प्रकार 'स्ट्रिंग' और 'System.DBNull'

sqlCommand.Parameters.AddWithValue("@Parameter", table.Value ?? DBNull.Value); 

लेकिन यह निम्नलिखित संकलन त्रुटि फेंकता है:

Operator ?? cannot be applied to operands of type string and System.DBNull

क्यों नहीं करता ' संकलक इस वाक्यविन्यास की अनुमति देता है?

+0

हो सकता है कि क्योंकि '?? ऑपरेटर को प्रत्येक तरफ एक ही प्रकार का होने की उम्मीद है? – kite

उत्तर

29

दोनों ऑपरेटरों को ऑब्जेक्ट होने की आवश्यकता है। स्पष्ट कलाकारों का उपयोग करें:

(object)table.Value ?? DBNull.Value; 
+7

यह वास्तव में सही नहीं है, कारण संकलन त्रुटि होती है क्योंकि दोनों ऑपरेटिंग नहीं करते हैं ?? वस्तुओं की आवश्यकता है। यह है कि एक स्पष्ट कलाकार के बिना (ऑब्जेक्ट) के साथ उत्तर में प्रदान किया गया) वहां एक निहित कास्ट उपलब्ध होना चाहिए। चूंकि स्ट्रिंग और सिस्टम के बीच कोई अंतर्निहित कलाकार नहीं है। डीबीएनयूएल, आपको संकलक त्रुटि मिलती है। –

+5

पिक्य होने की कोशिश नहीं कर रहा है, सिर्फ चिंतित है कि लेखक (जो कहता है कि वह जानता था कि त्रुटि कैसे प्राप्त करें) यह सोचकर दूर जा सकता है कि दोनों काम करते हैं ?? ऑपरेटर हमेशा वस्तुओं की जरूरत है। उनका सवाल था * क्यों * संकलक ऐसा नहीं करता * मैं इसे कैसे ठीक करूं *। –

+1

@AndrewBarrett ठीक है! इसे ठीक कैसे कर सकते हैं? :) – Axel

7

ऐसा इसलिए है क्योंकि string और System.DBNull के बीच कोई अंतर्निहित रूपांतरण नहीं है।

15

string और System.DBNull और दोनों के बीच कोई स्वत: परिवर्तन नहीं है तो आप object करने के लिए एक डाली जोड़कर प्रकार आप स्पष्ट रूप से चाहते हैं निर्दिष्ट करने की आवश्यकता:

sqlCommandObject.Parameters.AddWithValue("@Parameter", 
             table.Value ?? (object)DBNull.Value); 
संबंधित मुद्दे