【问题标题】:ExecuteNonQuery() does not return the affected rows in C# and SQL Server databaseExecuteNonQuery() 不会在 C# 和 SQL Server 数据库中返回受影响的行
【发布时间】:2017-10-12 19:34:06
【问题描述】:

我正在使用 SQL Server 2008 和 Visual Studio 2010。使用 ExecuteNonQuery() 命令时会出现此问题。在大多数情况下,它会返回受影响的实际行数,但是当我尝试删除一组记录时,它会返回 0。

当我在 SQL Server Management Studio 中打开表时,我看到 33 条记录被删除。

这是我的代码:

sqlQuery = "delete from  priv_  where user_id=" + txt_id.Text;
cmd = new SqlCommand(sqlQuery, con);
MessageBox.Show("rows affected = " + cmd.ExecuteNonQuery());

消息框显示

rows affected = 0

当我在 SQL Server Management Studio 中使用相同的查询时,它会显示

33 rows affected

我已将ONCOUNT 更改为关闭,但没有任何变化。

【问题讨论】:

  • 你怎么知道你使用的是同一个语句?你是从调试器中复制了这个变量吗:sqlQuery
  • 使用 SQL Profiler 并跟踪调用并确保语句确实被执行。还要在 MessageBox 语句之外获取 ExecuteNonQuery 并为其分配一个 int 变量并将该 int 正确转换为 String(),而不是对 2 种不同类型的隐式“加法运算”。
  • 我已经为语句分配了一个变量,但它并没有改变任何东西。
  • SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看Little Bobby Tables

标签: c# sql-server


【解决方案1】:

我遇到这个问题已经有几个星期了。我用于数据库的登录权限有问题。我能够运行查询,但不能从我的应用程序运行,它不会引发任何错误。所以我在

下添加了“所有者”权限到 SQL Server 2014 中的登录

我的服务器->安全->登录->我的登录->属性->用户 Mappings->My_database->选择适当的权限

【讨论】:

    猜你喜欢
    • 2019-04-24
    • 1970-01-01
    • 2017-07-19
    • 2018-04-04
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    相关资源
    最近更新 更多