2011-10-17 53 views
18

Tôi đang sử dụng quy trình được lưu trữ để chèn một số giá trị trong bảng.ExecuteNonQuery() trả về -1 luôn luôn

CREATE PROCEDURE [dbo].[Sp_InsertValue] 
@Val1 as nvarchar(50) 
@Val2 as nvarchar(50) 
as 
BEGIN 
    IF NOT EXISTS(SELECT * FROM @mytable WHERE [email protected]) 
    INSERT INTO @mytable VALUES(@VAL2) 
END 

Tôi đang sử dụng ExecuteNonQuery() để gọi thủ tục lưu trữ này trong ASP.NET bằng C#. Nó hoạt động tốt, không có vấn đề, nó chèn các giá trị nếu chúng không tồn tại. Vấn đề là cmd.ExecuteNonQuery() luôn trả về -1. Tôi mong đợi nếu một bản ghi được chèn vào, nó sẽ trả về 1, và 0 nếu không, phải không?

+0

khi bạn thực hiện quy trình này trong cửa sổ truy vấn máy chủ sql, bạn có thấy bất kỳ thông báo cập nhật bản ghi nào trong ngăn kết quả không? và cũng thử trả lại các hàng bị ảnh hưởng bằng cách thêm hàng này vào quy trình cuối cùng - Quay lại @@ Rowcount – Lingaraj

Trả lời

36

Kiểm tra xem bạn không có "SET NOCOUNT ON" trong quy trình đã lưu trữ của mình chưa. Điều này sẽ ngăn chặn số lượng hàng ảnh hưởng đến được trả lại. 'NoCount' theo nghĩa đen là ON.

Phản hồi mặc định sẽ luôn là '-1' trong trường hợp này.