2012-07-23 31 views
5

İşte veritabanında dinamik olarak tablo oluşturun. Kullanıcı, adını dilediği gibi girer ve dil radyo düğmesini seçer. Yani, i tamsayı cmd.ExecuteNonQuery değerini çalıştırdıktan sonra sorunu -1'den -1'e gidiyor. Ve bu tablonun oluşturulamadığını ancak veritabanına gittiğimde zaten başarıyla oluşturulduğunu gösteriyor. Lütfen yanlış nerede olduğumu bana bildirin. Thanx in Advance! SqlCommand.ExecuteNonQuery (vurgu mayın) için Dokümanlarcmd.ExecuteNonQuery i tamsayı değeri 0'dan başlıyor

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

Bu SQL-Injection için bir davet mi? SQL parametrelerini kullanın! Bunun dışında, her zaman bittiğinde bir bağlantıyı kapatın, en iyi kullanarak 'using-statement':' kullanarak (var con = new SqlConnection (conn)) {con.Açık(); // ...} '(bir istisna durumunda bile bağlantıyı örtülü olarak kapatacaktır). –

+2

@TimSchmelter: Parametreli SQL'in DDL için çalıştığından emin değilim ... –

cevap

8

GÜNCELLEŞTIRME, INSERT için SqlCommand.ExecuteNonQuery

MSDN Açıklamalar gelen Alır ve DELETE deyimlerini, dönüş değeri komutu etkilenen satırların sayısıdır. Eklenen veya güncelleştirilen bir tablosunda bir tetikleyici olduğunda, dönüş değeri, hem ekleme hem de güncelleme işleminden etkilenen satırların sayısını ve tetikleyiciden veya tetikleyicilerin etkilediği satırların sayısı içerir. Diğer tüm ifadeleri için dönüş değeri -1'dir. Geri alma gerçekleşirse, değeri de -1'dir.

7

: GÜNCELLEŞTIRME, INSERT için

ve DELETE deyimlerini, dönüş değeri komutu etkilenen satırların sayısıdır. Eklenen veya güncelleştirilen bir tabloda tetikleyici olduğunda, dönüş değeri hem ekleme hem de güncelleme işleminden etkilenen satırların sayısını ve tetikleyiciden veya tetikleyicilerin etkilediği satırların sayısını içerir. Diğer tüm ifade türleri için dönüş değeri -1'dir. Bir geri alma gerçekleşirse, dönüş değeri de -1'dir.

İfadeniz bir UPDATE, INSERT veya DELETE ifadesi mi? Hayır! Böylece -1 alıyorsunuz. o ExecuteNonQuery sonucundan biri atanmış kadar

Size O 0. asla 0'a "dan" -1 olacak i değeri ile ne demek açık değil O bir değere sahip değildir yok.

+0

Kullanıcının tablo oluşturma işleminin başarıyla tamamlanıp gerçekleştirilmediğini öğrenmesini istiyorum. Bu yüzden ben tamsayı kullanmıştım. Başka bir şekilde kullanabiliyorsanız lütfen yardım edin. –

+0

@rickevans: Tablo oluşturma başarısız olursa, aslında bir istisna alacaksınız. Bir deneyin - zaten var olan bir tabloyu yeniden oluşturmaya çalışırsanız ne olacağını görün. –

0

Tasarım gereği mi?

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

ve ayrıca:

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

Sen -1 alıyoruz diyorsun, doğru mu?

düzenleme: Sorunuzun son bölümünü cevap, bu bkz:

Check if table exists in SQL Server

+0

-1 alıyorum. Tüm yapmak istediğim, tablo oluşturma işleminin başarıyla yapıldığını kullanıcıya bildirmektir. –

+0

Doğrulamak için ek bir sorgu oluşturun. – johnny

+0

lütfen detaylandırır mısınız? –

-2

Public Shared Function (SqlParameter olarak As String ByVal SProcedure ByVal parametreleri()) takın Boolean olarak cnn As kullanma Yeni SqlConnection (Emplooyes) Deneyin

  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

Yığın Taşmasına Hoş Geldiniz! Bu kodun neden işe yaradığını açıklamak için bazı anlatılar eklemeyi düşünür müsün? Bu, soruyu soran kişiye ve birlikte gelen herkese çok yardımcı olacaktır. –