2010-07-15 14 views
6

पूर्णांक डेटा प्रकार परिवर्तक में शून्य मान के रूप में sql पैरामीटर को कैसे पास किया जाए?पूर्णांक डेटाटाइप चर में शून्य मान के रूप में sql पैरामीटर को कैसे पास करें?

 StockBO sBO = new StockBO(); 
     sBO.Mode = 2; 
     if (ddcmpanyname.SelectedIndex != 0) 
     { 
      sBO.Client_id = Convert.ToInt16(ddcmpanyname.SelectedValue); 
     } 
     else 
     { 
      sBO.Client_id = Convert.ToInt16(DBNull.Value);//Object cannot be cast from DBNull to other types. 
     sBO.Client_id =DBNull.Value;//Cannot implicitly convert type 

     } 
     ds=_StockController.StockGet(sBO); 

मैं इस तरह कोड बदल यह मैं मेरी टिप्पणी की जांच बाकी हिस्सा

उत्तर

19

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

else 
    { 
     sBO.Client_id = System.Data.SqlTypes.SqlInt32.Null; 
    } 
4

यह पूरी तरह स्पष्ट है कि तुम क्या इसका मतलब यह नहीं है जैसे त्रुटि देता है। यदि आप SQL पैरामीटर में शून्य मान को पारित करने का प्रयास कर रहे हैं, तो आपको DBNull.Value का उपयोग अपने SqlParameter (या जो भी प्रकार आप उपयोग कर रहे हैं) के मान के रूप में करना चाहिए। यदि आप सी # में एक शून्य पूर्णांक का प्रतिनिधित्व करना चाहते हैं, तो int? (या Nullable<int> का उपयोग करें - वे एक ही चीज़ हैं)।

आप एक सामान्य गैर-शून्य मूल्य प्रकार चर में एक शून्य मान को स्टोर नहीं कर सकते हैं। निरर्थक मान प्रकार अभी भी structs हैं, लेकिन वे गैर-शून्य प्रकार को लपेटते हैं और यह इंगित करने के लिए एक बूलियन मान जोड़ते हैं कि यह "असली" मान या शून्य है या नहीं। सी # इसके चारों ओर वाक्यात्मक चीनी कहते हैं, आप कार्य, विभिन्न रूपांतरण, उठा लिया ऑपरेटरों आदि के लिए null शाब्दिक उपयोग करने की अनुमति:

int? value = 5; 
value = null; 
if (value == null) 
{ 
    ... 
} 

अगर वह मदद नहीं करता है, हमें वास्तव में आपको क्या कोशिश कर रहे हैं के बारे में अधिक जानकारी दें करने के लिए।

संपादित करें: ठीक है, तो ऐसा लगता है कि StockBO.Client_idshort? प्रकार का होना चाहिए - लेकिन तब DBNull.Value सीधे सेट करने की अनुमति नहीं देगा। क्लाइंट आईडी को शून्य मान पर सेट करने के लिए आपको null का उपयोग करना चाहिए। जब भी आप ऑब्जेक्ट्स और एसक्यूएल पैरामीटर और परिणामों के बीच अनुवाद करते हैं, तो आपको खुद को उस प्रकार का रूपांतरण करने की आवश्यकता होगी - अगर आप इसे नियमित रूप से कर पाते हैं, तो यह आपके लिए आसान बनाने के लिए कुछ सहायक तरीकों का काम करें।

बेशक, यदि आप LINQ से SQL या किसी भी चीज का उपयोग करना शुरू करते हैं, तो आपको DBNull.Value के बारे में चिंता करने की आवश्यकता नहीं है - LINQ प्रदाता सीधे शून्य मूल्य प्रकारों का समर्थन करते हैं।

+0

मुझे पोस्ट देखने पर बहुत गर्व है ..धन्यवाद माँ मैंने अपना प्रश्न अपडेट किया है कृपया इसे जांचें – TinTin

+0

@Ayyappan: मैंने अपना जवाब संपादित कर लिया है। –

+0

धन्यवाद श्री जोन स्कीट – TinTin

1
सी # एसक्यूएल करने से सी #>

int number; 
Int32.TryParse(paramvalue, out number); 

को एसक्यूएल से

>

अपने पैरामीटर

1

को DBNull जोड़ने DBNull.Value का प्रयास करें; जैसा उदाहरण के लिए:

dbParamId.Value = (object)MyID ?? DBNull.Value; 
0

को ध्यान में रखते ParamValue एक पूर्णांक या एक DBNull.Value, मैं इसे पूर्णांक के लिए कास्टिंग कर रहा हूँ के रूप में क्वेरी का परिणाम होता है? इस तरह से:

var Result = ParamValue as int?; 

लगाने के लिए कि परिणाम शून्य है, Result.HasValue जाँच करते हैं। अन्यथा, एक सामान्य पूर्णांक के रूप में इसका इस्तेमाल करते हैं, या Result.Value

1

यह सीधे DBNull.Value आवंटित करने के लिए की तरह बेहतर है,:

sBO.Client_id = DBNull.Value

डीबीएनयूएल.वैल्यू सभी ऑब्जेक्ट

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