更新存储过程在SQL Server中不起作用



我有一个存储过程,通过将布尔值从1更改为0来更新状态。我正在将用户id传递给存储过程。我只需要更新用户状态。但现在它并没有这么做。

CREATE PROCEDURE [dbo].[UpdateStatus]
@userID INT
AS
BEGIN
UPDATE [dbo].[User]
SET Status = 0 
WHERE Id = @userID
END

我正在调用这个存储过程:

public User UpdateStatus(string UserId)
{
User userDetails = new User();
try
{
using (SqlConnection sqlConnection = new SqlConnection(connection.GetConnectionString()))
{
sqlConnection.Open();
SqlCommand cmd = new SqlCommand("UpdateStatus", sqlConnection);
cmd.Parameters.Add(new SqlParameter("@userID", UserId));
cmd.CommandType = CommandType.StoredProcedure;
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
userDetails.DisplayName = reader["DisplayName"].ToString();
}
}
sqlConnection.Close();
}
}
catch(Exception ex)
{
//ex.Message;
}
return userDetails;
}

我正在调用UpdateStatus函数。但它没有更新数据库中的状态

我的答案完全基于以下评论的猜测:

它没有更新数据库。因此返回状态为0,预期为1

在没有错误的情况下更新0行的UPDATE仍然是成功的语句。我怀疑您正在传递@userID的值,其中没有一行具有ID的值。这不会导致RETURN状态为1或其他任何状态。如果希望在没有更新行的情况下发生故障,请检查@@ROWCOUNT的值。然后是CCD_ 9或CCD_。

CREATE PROCEDURE [dbo].[UpdateStatus] @userID INT AS
BEGIN
UPDATE [dbo].[User]
SET Status=0 
WHERE Id = @userID;
--RETURN example
IF @@ROWCOUNT = 0
RETURN 1; --Denote "failure"
ELSE
RETURN 0; --Denote Success
--Or perhaps you want to THROW
IF @@ROWCOUNT = 0
THROW 89001, N'No rows were updated.',10; --USe a custom Error code appropriate for your application
END;

相关内容

最新更新