2011-10-28 11 views
9

मैं सी # में पहले से मौजूद DataRow करने के लिए एक स्तंभ जोड़ने के लिए कोशिश कर रहा हूँ देता है। बाद में कॉलम मेरे डेटाबेस से एक ही मूल्य से भरा जाएगा।ExecuteScalar अशक्त या DBNull (विकास या उत्पादन सर्वर)

डेटारो डॉ पहले से मौजूद है और कॉलम "COLNAME" भी मौजूद है।
कॉमटीबीपी मेरा SqlCommand है।

dr["COLNAME"] = Convert.ToInt32(comTBP.ExecuteScalar()); 

यह सब ठीक काम करता है यदि मेरे डेटाबेस में कोई मान है और ExecuteScalar() वह मान प्राप्त कर सकता है। यदि मैं अपने विकास सर्वर (स्थानीय) पर इस कोड का परीक्षण करता हूं तो यह भी काम करता है यदि ExecuteScalar() वापस शून्य या डीबीएनएल वापस करता है और मेरे नए कॉलम का मान 0 है। लेकिन समस्या तब प्रकट होती है जब मैं अपने सर्वर को उत्पादन सर्वर पर तैनात करता हूं। यदि मैं सब कुछ वही करता हूं, उसी डेटाबेस के साथ यह एक संदेश के साथ एक अपवाद फेंकता है कि यह डीबीएनएल को इंट 32 में परिवर्तित नहीं कर सकता है।
मेरा प्रश्न यह है कि यह त्रुटि उत्पादन सर्वर पर क्यों दिखाई देती है, न कि मेरे स्थानीय विकास सर्वर पर?

+1

सबसे अधिक संभावना विभिन्न डेटा से। – leppie

उत्तर

7
उत्पादन में

जाहिर है या तो एक NULL आदेश निष्पादन या कुछ connectionstring या जो कुछ भी में अलग से लौटे आप है; एक सामान्य नियम के रूप में आपको हमेशा ExecuteScalar के परिणामस्वरूप किसी अन्य प्रकार के कास्टिंग/कनवर्ट करने से पहले डीबीएनयूएल के लिए परीक्षण करना चाहिए।

चेक लगाम के जवाब यहाँ (और उसे वोट) अपने अच्छा सुझाव दिया समाधान के लिए: query और null से

Unable to cast object of type 'System.DBNull' to type 'System.String`

+1

'Convert.ToInt32' से' null' 0. –

+0

तब में परिणाम या तो वह कहना नहीं है सब सच या आप गलत ;-) मैंने पहले भी इसी तरह के मुद्दों था और हमेशा परिवर्तित करने से पहले DBNull के लिए जाँच/कास्टिंग –

+1

द्वारा हल कर रहे हैं मुझे पता है कि यह उत्पादन में पूर्ण लौटाता है .. यह विकास में न्यूल भी देता है क्योंकि यह वही डीबी है। मेरा सवाल यह था कि यह विकास में न्यूल और ** डीबीएनयूएल ** उत्पादन में क्यों लौटाता है? विकास में एनयूएलएल से इंट 32 तक कास्टिंग परिणामस्वरूप 0 होगा, लेकिन उत्पादन में यह डीबीएनयूएल से इंट 32 तक डालने की कोशिश करता है और – Yoni

17

ExecuteScalar रिटर्न कोई परिणाम के लिए शून्य मान के लिए DBNull। शायद आपके विकास सर्वर पर यह कभी नहीं हुआ (null परिणाम query से)।

2

अपने एसक्यूएल में ISNULL() फ़ंक्शन का उपयोग करें।

IsNull (check_expression, replacement_value)

यानी ...

चयन IsNull (योगफल (मूल्य), 0) आदेश

उत्पादन और विकास पर
संबंधित मुद्दे