更新存储过程在 SQL Server 中不起作用
Posted
技术标签:
【中文标题】更新存储过程在 SQL Server 中不起作用【英文标题】:Update stored procedure not working in SQL Server 【发布时间】:2021-06-12 13:20:35 【问题描述】:我有一个存储过程,通过将 bool 值从 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
函数。但它不会更新数据库中的状态
【问题讨论】:
一个 UPDATE 语句不会返回一个阅读器来阅读一些东西 “但它没有返回任何东西。” 为什么会这样?该过程未返回数据集。您将从该过程中获得的唯一信息是RETURN
状态,这可能是0
成功。
应该是executenonquery。您应该在另一个查询中进行选择。
好吧,如果 OP确实 需要返回数据,他们可能会使用 OUTPUT
子句 @MonkeyDLuffy
@Larnu 它没有更新数据库。所以返回状态为 0,预期为 1
【参考方案1】:
我的这个答案完全基于此评论的猜测:
它没有更新数据库。所以返回状态为 0,预期为 1
更新0
行且没有错误的UPDATE
仍然是一条成功的语句。我怀疑您正在传递@userID
的值,其中没有具有ID
值的行。这不会导致RETURN
状态为1
或其他任何值。如果您希望在没有更新任何行时发生故障,请检查 @@ROWCOUNT
的值。然后是THROW
或RETURN
。
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;
【讨论】:
如何在 c# 代码中使用这个@@ROWCOUNT。我尝试的是 cmd.Parameters.AddWithValue("@userID", UserId); var effectedRows = Convert.ToInt32(cmd.Parameters["@@ROWCOUNT"].Value);这有一个例外。 嗯?@@ROWCOUNT
是 SQL Server 中的系统变量,您无法在 C# 中访问它。它在程序中处理。如果您希望返回 @@ROWCOUNT
的值,您可以使用 OUTPUT
参数,但这是一个完全不同的问题。
请您提供任何有用的材料
how to use SQL Server OUTPUT parameters in C#@developer.
ExecuteNonQuery
无论如何都会返回行数,只要NOCOUNT OFF
以上是关于更新存储过程在 SQL Server 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Intellisense 在 SQL Server Management Studio 中不起作用。可能是啥原因?