2012-05-03 17 views
35

मैं संग्रहीत प्रक्रिया को निष्पादित करने की कोशिश कर रहा हूं और फिर शून्य मानों की जांच करने के लिए एक कथन का उपयोग करता हूं और मैं छोटा हो रहा हूं। मैं एक वीबी लड़का हूं इसलिए अगर मैं स्कूली लड़का सिंटैक्स त्रुटि कर रहा हूं तो कृपया मेरे साथ बेकार रहें।डीबीएनयूएल अगर कथन

objConn = new SqlConnection(strConnection); 
objConn.Open(); 
objCmd = new SqlCommand(strSQL, objConn); 
rsData = objCmd.ExecuteReader(); 
rsData.Read(); 

if (!(rsData["usr.ursrdaystime"].Equals(System.DBNull.Value))) 
     { 
      strLevel = rsData["usr.ursrdaystime"].ToString(); 

     } 

इस SQL ​​कनेक्शन सिर्फ एक मूल्य लौटा रहा है कि क्या मुझे जांच करने के लिए अनुमति देते हैं और इसलिए तो मेरे स्ट्रिंग को आबाद करने तो क्या होगा?

मैं सिर्फ नीचे की जांच करने के लिए सक्षम होने अगर एक मान दिया जा रहा है और नहीं यकीन है कि मैं इसे सही ढंग से कर रहा हूँ सी #

साथ करने के लिए इस्तेमाल कर रहा हूँ तो नहीं IsDBNull (rsData ("usr.ursrdaystime"))

किसी भी मदद की सराहना की जाएगी!

+3

यदि आप एक सेल उम्मीद कर रहे हैं, 'ExecuteScalar' –

+0

पर विचार अपने प्रश्न के शीर्षक में प्रोग्रामिंग भाषा नहीं डाल दें - कि क्या टैग के लिए हैं। –

+0

माफी माँगें - भविष्य में @ डीबीएम के लिए नीचे ध्यान देंगी। – PipBoy

उत्तर

58

यह काम करना चाहिए। ब्लॉक {..} के बाहर

using (var objConn = new SqlConnection(strConnection)) 
    { 
     objConn.Open(); 
     using (var objCmd = new SqlCommand(strSQL, objConn)) 
     { 
      using (var rsData = objCmd.ExecuteReader()) 
      { 
       while (rsData.Read()) 
       { 
       if (rsData["usr.ursrdaystime"] != System.DBNull.Value) 
       { 
        strLevel = rsData["usr.ursrdaystime"].ToString(); 
       } 
       } 
      } 
     } 
    } 

इस स्वत: निपटान होगा (करीब) संसाधन:

if (rsData["usr.ursrdaystime"] != System.DBNull.Value)) 
{ 
    strLevel = rsData["usr.ursrdaystime"].ToString(); 
} 

भी कथन का उपयोग जोड़ने के लिए, bellow तरह की जरूरत है।

if(rsData["usr.ursrdaystime"] != DBNull.Value) { 
    strLevel = rsData["usr.ursrdaystime"].ToString(); 
} 

यह:

rsData = objCmd.ExecuteReader(); 
rsData.Read(); 

बनाता है यह देखने के लिए की तरह आप ठीक एक मूल्य पढ़ रहे हैं

+0

क्या उपयोग कथन मेरे प्रारंभिक कनेक्शन स्ट्रिंग को प्रतिस्थापित करता है? मुझे लगता है कि यह निम्नलिखित objConn = new SqlConnection (strConnection) को प्रतिस्थापित करेगा; objConn.Open(); क्या मैं अभी भी objCmd और rsdata तारों का उपयोग करूंगा? – PipBoy

+0

मैंने कोड संपादित किया है - कथन का उपयोग करके उचित जोड़ा गया (जो बंद/निपटान) कनेक्शन। आपको अभी भी ** खोलने की आवश्यकता है ** कनेक्शन –

+0

मुझे लगता है कि इस उदाहरण में यह मेरी आवश्यकताओं के अनुरूप होगा - धन्यवाद! – PipBoy

9

मुहावरेदार तरह से कहने के लिए है। इसके बजाय IDbCommand.ExecuteScalar का उपयोग करें।

2

हां, बस एक वाक्यविन्यास समस्या है। ऐसा करें:

if (reader["usr.ursrdaystime"] != DBNull.Value) 

.Equals() अगर two Object instances are the same देखने के लिए जाँच कर रहा है।

+1

वह स्थिति में उसे ले जाएगा। '==' से '! =' –

+0

बनाओ, मैंने देखा कि मैंने इसे पोस्ट करने के बाद। अब सही किया गया। – mgnoonan

2

पर विचार करें:

if(rsData.Read()) { 
    int index = rsData.GetOrdinal("columnName"); // I expect, just "ursrdaystime" 
    if(rsData.IsDBNull(index)) { 
    // is a null 
    } else { 
    // access the value via any of the rsData.Get*(index) methods 
    } 
} else { 
    // no row returned 
} 

इसके अलावा: आप using अधिक की जरूरत है, पी

-1

पहला प्रयोग ExecuteScalar पर

objConn = new SqlConnection(strConnection); 
objConn.Open(); 
objCmd = new SqlCommand(strSQL, objConn); 
object result = cmd.ExecuteScalar(); 
if(result == null) 
    strLevel = ""; 
else 
    strLevel = result.ToString(); 
2

अपने वीबी के सबसे करीब बराबर होगा (see this):

Convert.IsDBNull() 

लेकिन तरीके यह करने के लिए की एक संख्या देखते हैं, और सबसे from here

0

जुड़े हुए हैं मैं String.IsNullorEmpty अक्सर उपयोग । यह उसे काम करेगा क्योंकि जब डीबीएनयूएल सेट हो जाता है। टॉस्ट्रिंग यह खाली हो जाता है।

if(!(String.IsNullorEmpty(rsData["usr.ursrdaystime"].toString())){ 
     strLevel = rsData["usr.ursrdaystime"].toString(); 
    }