我正在运行一个asp.net 2.0 Web应用程序。突然今天早上,ExecuteNonQuery开始返回-1,即使正在运行的SP中的命令正在执行(我看到在DB中插入和更新的项目),并且没有抛出异常。
仅当我连接到生产数据库时才会发生这种情况。当我连接到我们的开发DB时,它们会返回受影响的正确行数。
另外,有趣的是,ExecuteDataSet没有问题 - 它可以很好地返回DataSet。
所以它似乎不是一个连接问题。但那么,还有什么呢?
答案 0 :(得分:5)
您还可以检查程序,看看是否有这行代码 -
SET NOCOUNT ON
这将导致ExecuteNonQuery始终返回-1。
答案 1 :(得分:2)
-1表示“没有行影响” SELECT语句也将返回-1。
检查SP对开发和实时环境的影响。
取自SqlCommand::ExecuteNonQuery Method
对于UPDATE,INSERT和DELETE语句,返回值是受命令影响的行数。当插入或更新的表上存在触发器时,返回值包括插入或更新操作影响的行数以及受触发器或触发器影响的行数。对于所有其他类型的语句,返回值为-1。如果发生回滚,则返回值也为-1。
答案 2 :(得分:1)
我在NpgsqlDataAdapter中遇到almost same problem(在Postgresql中),Update方法总是返回1.
也许您的开发数据库的连接字符串与生产数据库不同。或者,如果它们的连接字符串之间确实没有区别,那么生成db的服务包可能与您的开发数据库不同。
答案 3 :(得分:0)
根据msdn
,ExceuteNonQuery为所有类型的存储过程返回-1只有在sattment的情况下才会返回更新的记录值