【问题标题】:ExecuteNonQuery doesn't return resultsExecuteNonQuery 不返回结果
【发布时间】:2011-07-17 23:21:29
【问题描述】:

这是我的(粗略)代码(DAL):

int i;
// Some other declarations

SqlCommand myCmdObject = new SqlCommand("some query");

conn.open();
i = myCmdObject.ExecuteNonQuery();
conn.close();

问题是:即使我的SELECT 查询中存在记录,i 中的值仍然是-1

可能是什么问题?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    因为 SET NOCOUNT 选项设置为 on。删除“SET NOCOUNT ON;”行在您的查询或存储过程中。

    SqlCommand.ExecuteNonQuery() returns -1 when doing Insert / Update / Delete 上查看更多信息。

    【讨论】:

    • 你的链接失效了
    【解决方案2】:

    当您想要执行不应返回值或记录集的 SQL 语句时,应使用 ExecuteNonQuery。

    因此,如果您想运行更新、删除或插入语句,您应该使用 ExecuteNonQuery。 ExecuteNonQuery 返回受语句影响的行数。这听起来很不错,但是当您使用 SQL Server 2005 IDE 或 Visual Studio 创建存储过程时,它会添加一个小行,破坏一切。

    那一行是:SET NOCOUNT ON;此行打开 SQL Server 的 NOCOUNT 功能,该功能“停止将指示受 Transact-SQL 语句影响的行数的消息作为结果的一部分返回”,因此它使存储过程在以下情况下始终返回 -1从应用程序调用(在我的例子中是一个 Web 应用程序)。

    最后,从存储过程中删除该行,您现在将获得一个值,指示受该语句影响的行数。

    编程愉快!

    http://aspsoft.blogs.com/jonas/2006/10/executenonquery.html

    【讨论】:

      【解决方案3】:

      如果您只想从查询中获取一个整数,请使用:

      myCmdObject.ExecuteScalar()
      

      【讨论】:

      • ExecuteScalar 将仅返回执行查询中第一行的第一列值。
      • 是真的,但正如我所说的那样,选择单个整数时,它应该是第一行的第一列:) span>
      【解决方案4】:

      来自 MSDN:SqlCommand.ExecuteNonQuery Method

      您可以使用 ExecuteNonQuery 来 执行目录操作(对于 例如,查询一个结构 数据库或创建数据库对象 例如表格),或更改数据 在不使用 DataSet 的数据库中 通过执行 UPDATE、INSERT 或 DELETE 声明。

      虽然 ExecuteNonQuery 返回 没有行,任何输出参数或 映射到参数的返回值是 填充数据。

      对于更新、插入和删除 语句,返回值为 受影响的行数 命令。当触发器存在于 被插入或更新的表, 返回值包括数量 受插入影响的行或 更新操作和数量 受触发器影响的行或 触发器。 对于所有其他类型的 语句,返回值为-1。如果 发生回滚,返回值为 也是-1。

      您正在使用 SELECT 查询,因此您得到 -1

      【讨论】:

        【解决方案5】:

        您将EXECUTENONQUERY() 用于INSERTUPDATEDELETE

        但是对于SELECT,你必须使用EXECUTEREADER().........

        【讨论】:

          【解决方案6】:

          如果您想运行更新、删除、 或插入语句,你应该使用 执行非查询。执行非查询 返回受影响的行数 声明。

          How to Set Count On

          【讨论】:

            【解决方案7】:

            ExecuteNonQuery 方法用于查询的 SQL 语句,例如 INSERTUPDATE、...如果您想使用 ExecuteScalarExecuteReader您希望您的语句返回结果(即查询)。

            【讨论】:

              【解决方案8】:

              您执行什么样的查询?使用 ExecuteNonQuery 用于 UPDATEINSERTDELETE 查询。根据the documentation

              对于更新、插入和删除 语句,返回值为 受影响的行数 命令。当触发器存在于 被插入或更新的表, 返回值包括数量 受插入影响的行或 更新操作和数量 受触发器影响的行或 触发器。对于所有其他类型的 语句,返回值为-1。

              【讨论】:

              • 如果我们运行一个StoredProcedure,它将在表中插入或更新或删除一条记录,返回值是多少,
              【解决方案9】:

              您能发布确切的查询吗? ExecuteNonQuery 方法返回 @@ROWCOUNT Sql Server 变量,无论在最后一个查询执行后是什么,都是 ExecuteNonQuery 方法返回的。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2012-03-31
                • 2016-02-28
                • 1970-01-01
                • 2017-01-20
                • 2011-12-28
                • 1970-01-01
                • 2011-12-09
                相关资源
                最近更新 更多