gpt4 book ai didi

c#-4.0 - 仅更新 1 条记录时,ExecuteNonQuery 返回值 2

转载 作者:行者123 更新时间:2023-12-02 17:06:13 24 4
gpt4 key购买 nike

通过 Enterprise Library 5.0 的示例运行,当我使用 ExecuteNonQuery 运行更新存储过程时,它返回 2。更新基于 ProductID,即表的主键(是的,我检查过,它是唯一的)。

这是简单的存储过程:

ALTER PROCEDURE [dbo].[UpdateProductsTable]
@ProductID int,
@ProductName varchar(50) = NULL,
@CategoryID int = NULL,
@UnitPrice money = NULL
AS
BEGIN
UPDATE Products
SET
ProductName = @ProductName,
CategoryID = @CategoryID,
UnitPrice = @UnitPrice
WHERE ProductID = @ProductID
END

在 SSMS 中执行此 sp 在查询结果窗口的右下角显示“1 行”,并且在网格中返回值为 0。单击消息选项卡会显示

(1 row(s) affected)

(1 row(s) affected)

(1 row(s) affected)

不知道为什么我在这里看到了 3 次,但我不认为这就是问题所在。

这是调用 sp 的代码:

public static void Exec_Update_Query()
//updates a column of a single row, checks that the update succeeded, and then update it again to return it to the original value
{
string oldName = "Chai";
string newName = "Chai Tea";

SqlDatabase defaultDB = EnterpriseLibraryContainer.Current.GetInstance<Database>() as SqlDatabase;

// Create command to execute the stored procedure and add the parameters.
DbCommand cmd = defaultDB.GetStoredProcCommand("UpdateProductsTable");
defaultDB.AddInParameter(cmd, "ProductID", DbType.Int32, 1);
defaultDB.AddInParameter(cmd, "ProductName", DbType.String, newName);
defaultDB.AddInParameter(cmd, "CategoryID", DbType.Int32, 1);
defaultDB.AddInParameter(cmd, "UnitPrice", DbType.Currency, 18);

// Execute the query and check if one row was updated.
int i = defaultDB.ExecuteNonQuery(cmd);
if (i == 1)
{
// Update succeeded.
}
else
{
Console.WriteLine("ERROR: Could not update just one row.");
}

// Change the value of the second parameter
defaultDB.SetParameterValue(cmd, "ProductName", oldName);

// Execute query and check if one row was updated
if (defaultDB.ExecuteNonQuery(cmd) == 1)
{
// Update succeeded.
}
else
{
Console.WriteLine("ERROR: Could not update just one row.");
}
}

我正在使用 int i 查看该方法的返回值,它返回 2。你知道为什么会这样吗?这是针对 SQL 2005 运行的 VS2010 中的 Enterprise Libarary 5.0。非常简单,但令人困惑。

最佳答案

如果我没记错的话,由于您的命令而触发的任何触发器的结果也将包含在返回的行计数中。这很可能是您的问题。

编辑:文档

来自MSDN SqlCommand.ExecuteNonQuery :

When a trigger exists on a table being inserted or updated, the return value includes the number of rows affected by both the insert or update operation and the number of rows affected by the trigger or triggers.

关于c#-4.0 - 仅更新 1 条记录时,ExecuteNonQuery 返回值 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7477431/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com