2011-11-14 39 views
8

Ive đã sử dụng phương pháp này trước để trả về số lượng hàng đã thay đổi. Tôi là nó để chạy một phương thức chèn, chèn chạy tốt trong thủ tục được lưu trữ, nhưng giá trị trả về từ ExecuteNonQuery luôn trả về -1.C#: ExecuteNonQuery() trả về -1

Đây là mã của tôi C#:

int ret = 0; 

using (SqlConnection conn = new SqlConnection(this.ConnectionString)) 
{ 
    using (SqlCommand cmd = new SqlCommand(QueryName, conn)) 
    { 
     conn.Open(); 

     if (Params != null) 
      cmd.Parameters.AddRange(Params); 

     cmd.CommandType = CommandType.StoredProcedure; 

     ret = cmd.ExecuteNonQuery(); 

     conn.Close(); 
    } 
} 

return ret; 

Tại sao tôi nhận -1 thay vì con số thực tế của hàng thay đổi?

+0

Vì vậy, các sửa đổi trong bảng thực sự diễn ra nhưng bạn đang nhận được -1? – Tudor

+0

Nó có thể trả về bất kỳ giá trị trả về nào của bạn, có lẽ là -1 nếu không được chỉ định khác .. –

+0

Bạn đã thực sự nắm bắt được cuộc gọi SQL bằng profiler và được thực hiện thủ công để xem số hàng thay đổi thực tế? –

Trả lời

21

Nếu bạn sử dụng phương pháp này để gọi một thủ tục lưu trữ mà thực hiện UPDATE/INSERT trong một bảng sự trở lại phương pháp -1 nếu procudere lưu trữ có NOCOUNT SET theo giá trị ON.

- source

5

Từ Microsoft:

Đố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 một rollback xảy ra, giá trị trả về cũng là -1.

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

Bạn có lẽ nhận được -1 vì bạn đang sử dụng một thủ tục lưu trữ và không phải là một sự thay đổi bảng trực tiếp

0

giá trị gì bạn đang trở về từ thủ tục lưu trữ của bạn? Bạn có thể hiển thị mã cho quy trình được lưu trữ của mình không. Bạn có thể cần phải chỉnh sửa thủ tục lưu sẵn của bạn để trả về giá trị yêu cầu, OR, thủ tục lưu sẵn của bạn trả về -1 hoặc là cụ thể hoặc biến mà thủ tục lưu sẵn trả về -1 là giá trị của nó.

0

Lấy kết quả đếm hàng từ quy trình được lưu trữ giống như sử dụng @[email protected]@Rowcount. Trong DAL, sử dụng dbManager.AddOutParameter("RowCount", DbType.Int32, rowCount); Sau đó, trong các hàng cuối cùng, bạn sẽ nhận được như (int)dbManager.GetParameterValue("RowCount").

Các vấn đề liên quan