更新:我的代码按预期行为,因为存储过程中存在错误导致其失败。
我似乎无法弄清楚为什么或如何解决这个问题,因为我没有得到任何错误,我得到的是返回值为0,这意味着失败。
这是我的.net代码:
SqlParameter returnValue= new SqlParameter("returnValue", SqlDbType.Int);
returnValue.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(returnValue);
cmd.ExecuteNonQuery();
result = Convert.ToInt32(returnValue.Value); //1 success and 0 failed
我的存储过程:
CREATE PROCEDURE EmployeeUpdate
@employee_id BIGINT,
@name nvarchar(250)
AS
BEGIN
SET NOCOUNT ON
DECLARE @Result int
SET @Result = 0
UPDATE Employee
SET name = @name
WHERE employee_id = @employee_id
IF (@@rowcount = 1)
BEGIN
SET @Result = 1
END
SET NOCOUNT OFF
RETURN @Result
END
因此,如果我只是从SQL Server Management Studio执行存储过程,它会成功更新我的行而不会出现任何错误
EXEC EmployeeUpdate 34,'John John'
Return Value = 1
答案 0 :(得分:2)
替换以下
CREATE PROCEDURE EmployeeUpdate
@employee_id BIGINT,
@name nvarchar(250)
AS
BEGIN
SET NOCOUNT ON
跟随
CREATE PROCEDURE EmployeeUpdate
@employee_id BIGINT,
@name nvarchar(250)
AS
BEGIN
SET NOCOUNT OFF
SET NOCOUNT ON表示T-SQL影响的行数 不予退还
SET NOCOUNT OFF表示效果的行数 将返回T-SQL。
答案 1 :(得分:1)
我建议完全删除returnValue参数,只使用ExecuteNonQuery()方法的返回值:
int rowsAffected = cmd.ExecuteNonQuery();
result = rowsAffected == 1 ? 1 : 0;
存储过程:
CREATE PROCEDURE EmployeeUpdate
@employee_id BIGINT,
@name nvarchar(250)
AS
BEGIN
UPDATE Employee
SET name = @name
WHERE employee_id = @employee_id
END