Nic*_*mas 4 c# ado.net sql-server-2008
我们依靠SqlDataReader.RecordsAffected计算存储过程修改的行数。
MSDN 对其定义如下:
更改、插入或删除的行数;如果没有行受到影响或者语句失败,则为 0;SELECT 语句为 -1...该属性的值是累积的。例如,如果以批处理方式插入两条记录,则RecordsAffected 的值为2。
看来 ADO.NET 会误解任何使用该子句OUTPUT作为语句SELECT的语句,并返回 -1,而RecordsAffected不是实际修改的行数。
例如:
CREATE TABLE dbo.example (
a INT
, b VARCHAR(10)
, c DATETIME2(3) DEFAULT(SYSUTCDATETIME())
);
INSERT INTO dbo.example (
a
, b
)
OUTPUT inserted.c -- Comment out this line and RecordsAffected goes from -1 to 1.
VALUES (
1
, 'blah'
);
Run Code Online (Sandbox Code Playgroud)
这是 ADO.NET 的行为是有意为之还是错误造成的?
作为记录,我们计划更改代码以使用显式捕获修改行的计数@@ROWCOUNT并将它们作为OUTPUT存储过程中的参数返回。