2012-07-23 13 views
5

यहां मैं डेटाबेस में गतिशील रूप से तालिका बना रहा हूं। उपयोगकर्ता नाम की इच्छा के रूप में नाम दर्ज करता है और भाषा रेडियोधटन का चयन करता है। तो समस्या है cmd.ExecuteNonQuery के निष्पादन के बाद समस्या है I integer का मान -1 से -1 जा रहा है और दिखाता है कि तालिका नहीं बनाई जा सकती है, लेकिन जब मैं डेटाबेस पर जाता हूं तो यह पहले से ही सफलतापूर्वक बनाया गया है। कृपया मुझे बताएं कि मैं कहां गलत कर रहा हूं। अग्रिम में Thanx !!cmd.ExecuteNonQuery i integer का मान -1 से 0

protected void btnpaper_Click(object sender, EventArgs e) 
    { 
     try 
     {     
       string conn = ConfigurationManager.ConnectionStrings["sqlconn"].ConnectionString; 
       SqlConnection con = new SqlConnection(conn); 
       con.Open(); 
       char[] arr = new char[] {'n','g','l','i','s','h'}; 
       string str = "CREATE TABLE " + Label1.Text.Trim() + 
          txtpaperset.Text.Trim()+ rbtnEng.Text.TrimEnd(arr) + 
          "(" + "quesNo int NOT NULL PRIMARY KEY, " + 
          "question varchar(1000) NOT NULL," + 
          "ansA varchar(500) NOT NULL, " + 
          "ansB varchar(500) NOT NULL, " + 
          "ansC varchar(500) NOT NULL, " + 
          "ansD varchar(500) NOT NULL, " + 
          "rightAns varchar(50) NOT NULL " + ")";      
       SqlCommand cmd = new SqlCommand(str, con); 
       int i = cmd.ExecuteNonQuery(); 
       if (i > 0) 
       { 
        lblerrormsg.Visible = true; 
        con.Close(); 
       } 
       else 
       { 
        lblerrormsg.Text = "Table Not Created Please Try with Different Name!";       
        con.Close(); 
       }     

     } 
     catch (System.Exception excep) 
     { 
      MessageBox.Show(excep.Message); 
     }  
    } 
+1

क्या यह एसक्यूएल-इंजेक्शन के लिए एक आमंत्रण है? एसक्यूएल-पैरामीटर्स का प्रयोग करें! इसके अलावा, जब आप इसे समाप्त कर लें तो हमेशा एक कनेक्शन बंद करें, 'उपयोग-कथन' का उपयोग करके सर्वोत्तम: '(var con = new SqlConnection (conn) का उपयोग करके {con।खुला(); // ...} '(यह अपवाद के मामले में भी कनेक्शन को बंद कर देगा)। –

+2

@TimSchmelter: मुझे यकीन नहीं है कि डीडीएल के लिए पैरामीटरयुक्त एसक्यूएल काम करता है ... –

उत्तर

8

SqlCommand.ExecuteNonQuery

अद्यतन, सम्मिलित करें के लिए पर MSDN टिप्पणी से ले जाता है, और बयान हटाएँ, वापसी मान आदेश से प्रभावित पंक्तियों की संख्या है। जब तालिका को डालने या अपडेट करने पर एक ट्रिगर मौजूद होता है, तो वापसी मान में ट्रिगर या ट्रिगर्स से प्रभावित पंक्तियों की संख्या दोनों प्रभावित पंक्तियों की संख्या शामिल होती है। अन्य सभी प्रकार के कथन के लिए, वापसी मान -1 है। यदि रोलबैक होता है, तो वापसी मान भी -1 है।

7

SqlCommand.ExecuteNonQuery (जोर मेरा) के लिये दस्तावेज से:

अद्यतन, सम्मिलित करें के लिए, और बयानों हटाएँ, वापसी मान आदेश से प्रभावित पंक्तियों की संख्या है। जब एक ट्रिगर डालने या अद्यतन होने पर एक ट्रिगर मौजूद होता है, तो वापसी मूल्य में सम्मिलित या अद्यतन ऑपरेशन और ट्रिगर या ट्रिगर्स द्वारा प्रभावित पंक्तियों की संख्या दोनों से प्रभावित पंक्तियों की संख्या शामिल होती है। अन्य सभी प्रकार के बयान के लिए, वापसी मूल्य -1 है। यदि कोई रोलबैक होता है, तो वापसी मान भी -1 होता है।

क्या आपका कथन एक अद्यतन, INSERT या DELETE कथन है? नहीं। इसलिए आप -1 प्राप्त कर रहे हैं।

यह स्पष्ट आप यह 0. कभी नहीं i 0. "से" -1 में जाने का मूल्य द्वारा क्या मतलब नहीं है यह जब तक यह ExecuteNonQuery का परिणाम से एक असाइन किया गया है एक मूल्य नहीं है।

+0

मैं चाहता हूं कि उपयोगकर्ता यह जान ले कि तालिका निर्माण सफल हो या नहीं। इसलिए मैंने पूर्णांक का उपयोग किया था। अगर मैं किसी अन्य तरीके से उपयोग कर सकता हूं तो कृपया मदद करें। –

+0

@rickevans: मुझे उम्मीद है कि यदि तालिका निर्माण विफल रहता है, तो आपको वास्तव में अपवाद मिलेगा। इसे आज़माएं - देखें कि क्या होता है यदि आप पहले से मौजूद एक टेबल को फिर से बनाने का प्रयास करते हैं। –

0

क्या यह डिज़ाइन द्वारा है?

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx

और यह भी:

cmd.executenonquery is returning -1 in vb.net windows application

आप कह रहे हैं आप -1 हो रही है, सही है?

संपादित करें: अपने प्रश्न के अंतिम भाग का जवाब देने में, इस देखें:

Check if table exists in SQL Server

+0

मुझे मिल रहा है -1। मैं बस इतना करना चाहता हूं कि तालिका निर्माण ने सफलतापूर्वक काम किया है। –

+0

इसे सत्यापित करने के लिए एक अतिरिक्त क्वेरी बनाएं। – johnny

+0

क्या आप विस्तृत कर सकते हैं ?? –

-2

लोक साझा समारोह सम्मिलित (ByVal SProcedure स्ट्रिंग के रूप में, ByVal मानकों() SqlParameter के रूप में) बूलियन के रूप में उपयोग करते हुए सीएनएन के रूप में न्यू एसक्यूएलकनेक्शन (एम्प्लोयस)

  Dim cmd As SqlCommand = New SqlCommand(SProcedure, cnn) 
      cmd.CommandType = CommandType.StoredProcedure 
      cmd.Parameters.AddRange(parameters) 

      If cnn.State = ConnectionState.Closed Then 
       cnn.Open() 
      End If 

      Dim Ls As Integer 
      Ls= cmd.ExecuteNonQuery() 
      If Ls = -1 Then 
       Return False 
      Else 
       Return True 
      End If 

     Catch ex As Exception 
      Return False 
     Finally 
      cnn.Close() 
     End Try 
    End Using 
End Function 
+0

स्टैक ओवरफ़्लो में आपका स्वागत है! क्या आप यह बताने के लिए कुछ कथाएं जोड़ने पर विचार करेंगे कि यह कोड क्यों काम करता है, और यह सवाल का जवाब क्या बनाता है? प्रश्न पूछने वाले व्यक्ति के लिए यह बहुत उपयोगी होगा, और कोई और जो साथ आता है। –