C# 从';IDbCommand.ExecuteNonQuery';代表?

C# 从';IDbCommand.ExecuteNonQuery';代表?,c#,stored-procedures,ado.net,sybase,C#,Stored Procedures,Ado.net,Sybase,我正在使用ADO.net调用存储过程来执行对Sybase数据库的插入,我希望包括单元测试,以确保插入调用正常工作 根据规范: IDbCommand.ExecuteNonQuery() 返回:受影响的行数 当每个存储过程插入一行时,我检查返回的值==1。 但是,每个过程返回一个不同的值,范围从3到8 那么,短语“受影响的行数”的确切含义是什么 我应该明确指出,过程中的语句只有Set、Insert、Print和Return,而似乎对返回值没有影响的语句只有Insert 谢谢。那么您的程序在执行某些

我正在使用ADO.net调用存储过程来执行对Sybase数据库的插入,我希望包括单元测试,以确保插入调用正常工作

根据规范:

IDbCommand.ExecuteNonQuery()
返回:受影响的行数

当每个存储过程插入一行时,我检查返回的值==1。 但是,每个过程返回一个不同的值,范围从3到8

那么,短语“受影响的行数”的确切含义是什么

我应该明确指出,过程中的语句只有Set、Insert、Print和Return,而似乎对返回值没有影响的语句只有Insert


谢谢。

那么您的程序在执行某些操作时,可能会出现一些触发器和系统更新,具体取决于您的内部逻辑。这个数字是受影响行的总和

更多信息:

只要验证sql例程逻辑,如果它有一些依赖逻辑,以防在特定条件下添加超过1行。

在不了解Sybase提供程序的情况下,一个可能的答案是ExecuteOnQuery返回sql语句返回的“受影响的行数”消息的累积和。在SQL Server中,返回受上一条语句影响的行数

我在ExecuteNonQuery返回值的SqlCommand.cs源代码中找到了此注释,但没有实际验证它:

// sql reader will pull this value out for each NextResult call.  It is not cumulative
// _rowsAffected is cumulative for ExecuteNonQuery across all rpc batches
internal int _rowsAffected = -1; // rows affected by the command
在SQL Server中,可以在存储过程中使用来控制返回的计数消息的数量。如果未返回任何消息,ExecuteOnQuery通过在开始处设置SET-NOCOUNT ON返回-1

SET和RETURN不会将消息发送到count消息所在的同一输出流,但PRINT会发送消息。打印的字符串不应该影响ExecuteOnQuery整数返回值,但我真的不知道

关键是,使用T-SQL输出参数来计算感兴趣的行比依赖ExecuteOnQuery返回值要好。输出参数的替代方法是使用SELECT resultset和ExecuteScalar

另见

根据定义,“ExecuteOnQuery”的返回值与存储过程执行无关

对于UPDATE、INSERT和DELETE语句,返回值是受命令影响的行数。对于所有其他类型的语句,返回值为-1


您可以改为使用存储过程返回值或输出参数来获得所需的值。

我是否希望设置、打印或返回会影响任何行?