2012-07-23 89 views
5

Ở đây tôi tạo bảng trong cơ sở dữ liệu động. Người dùng nhập tên như mong muốn của mình và chọn radio ngoại tuyến. Vì vậy, vấn đề là sau khi thực hiện cmd.ExecuteNonQuery giá trị của số nguyên i là đi -1 từ 0. Và cho thấy rằng bảng couldnt được tạo ra nhưng khi tôi đi đến cơ sở dữ liệu của nó đã được tạo thành công. Xin vui lòng cho tôi biết nơi tôi đang làm sai. Thanx trong Advance !!cmd.ExecuteNonQuery giá trị của số nguyên i là đi -1 từ 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

Đây có phải là lời mời cho SQL-Injection không? Sử dụng tham số SQL! Ngoài ra, luôn luôn đóng một kết nối khi bạn đã kết thúc với nó, tốt nhất bằng cách sử dụng 'using-statement':' using (var con = new SqlConnection (conn)) {con.Mở(); // ...} '(nó sẽ đóng kết nối ngầm, ngay cả trong trường hợp ngoại lệ). –

+2

@TimSchmelter: Tôi không chắc SQL được tham số hóa hoạt động cho DDL ... –

Trả lời

8

Đưa từ MSDN Các chú thích trên SqlCommand.ExecuteNonQuery

Đối UPDATE, INSERT và DELETE, giá trị trả về là số hàng bị ảnh hưởng bởi lệnh. Khi trình kích hoạt tồn tại trên bảng được chèn hoặc cập nhật, giá trị trả lại bao gồm số của các hàng bị ảnh hưởng bởi cả thao tác chèn hoặc cập nhật và số của các hàng bị ảnh hưởng bởi trình kích hoạt hoặc trình kích hoạt. Đối với tất cả các loại câu lệnh khác, giá trị trả về là -1. Nếu xảy ra hồi quy, giá trị trả về cũng là -1.

7

Từ các tài liệu cho SqlCommand.ExecuteNonQuery (tôi nhấn mạnh):

Đối UPDATE, INSERT và DELETE, giá trị trả về là số hàng bị ảnh hưởng bởi lệnh. Khi trình kích hoạt tồn tại trên một bảng được chèn hoặc được cập nhật, giá trị trả lại bao gồm số hàng bị ảnh hưởng bởi cả thao tác chèn hoặc cập nhật và số hàng bị ảnh hưởng bởi trình kích hoạt hoặc trình kích hoạt. Đối với tất cả các loại câu lệnh khác, giá trị trả về là -1. Nếu xảy ra hồi quy, giá trị trả về cũng là -1.

Tuyên bố của bạn là câu lệnh UPDATE, INSERT hoặc DELETE? Không. Do đó bạn đang nhận được -1.

Nó không rõ ràng những gì bạn có nghĩa là bởi giá trị của i sẽ -1 "từ" 0. Đó là không bao giờ 0. Nó không một giá trị cho đến khi nó được gán một từ kết quả của ExecuteNonQuery.

+0

Tôi muốn người dùng biết được liệu việc tạo bảng có được thực hiện thành công hay không. Do đó tôi đã sử dụng số nguyên i. Xin hãy giúp đỡ nếu tôi có thể sử dụng một cách khác. –

+0

@rickevans: Tôi hy vọng rằng nếu việc tạo bảng thất bại, bạn sẽ thực sự nhận được một ngoại lệ. Hãy thử - hãy xem điều gì sẽ xảy ra nếu bạn cố gắng tạo lại một bảng đã tồn tại. –

0

Có theo thiết kế không?

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

và cũng:

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

Bạn đang nói rằng bạn đang nhận được -1, có đúng không?

chỉnh sửa: để trả lời phần cuối của câu hỏi của bạn, thấy điều này:

Check if table exists in SQL Server

+0

Tôi nhận được -1. tất cả những gì tôi muốn làm là thông báo cho người dùng rằng việc tạo bảng đã thực hiện thành công. –

+0

tạo một truy vấn bổ sung để xác minh nó. – johnny

+0

bạn có thể vui lòng xây dựng ?? –

-2

Chức năng Shared Công Insert (ByVal SProcedure As String, các thông số ByVal() Như SqlParameter) As Boolean Sử dụng cnn Như New SqlConnection (Emplooyes) Hãy thử

  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

Chào mừng bạn đến với Stack Overflow! Bạn có cân nhắc thêm một số câu chuyện để giải thích tại sao mã này hoạt động không, và điều gì làm cho nó trở thành câu trả lời cho câu hỏi? Điều này sẽ rất hữu ích cho người hỏi câu hỏi, và bất cứ ai khác đến cùng. –