【问题标题】:Command.ExecuteNonQuery() return always -1Command.ExecuteNonQuery() 总是返回 -1
【发布时间】:2011-06-21 05:57:26
【问题描述】:

当我使用 ExecuteNonQuery() 方法在 C# 中执行 Select 命令时遇到问题;它总是返回-1;这意味着所选语句没有返回任何记录,不是吗?

但是当我打开 sql 管理工作室并运行相同的选择语句时;我发现它返回了行。

请帮帮我!

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    您不应该执行SELECT with an ExecuteNonQuery()。之所以称为 ExecuteNonQuery,是因为您想要执行的不是查询。 SELECT 是一个查询。你想要 ExecuteReader。如果您想执行UPDATEDELETE,则可以执行ExecuteNonQuery(),这将显示受影响的行数。

    【讨论】:

      【解决方案2】:

      不,这表明它影响没有行。

      来自SqlCommand.ExecuteNonQuery 的文档(强调我的):

      对于 UPDATE、INSERT 和 DELETE 语句,返回值是受命令影响的行数。当正在插入或更新的表上存在触发器时,返回值包括受插入或更新操作影响的行数以及受一个或多个触发器影响的行数。 对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也是-1。

      也许您正在寻找ExecuteScalar?这适用于 - 比如说 - 获取计数。它从查询中返回单个值。否则(如果您想要实际结果),请使用ExecuteReader 获取“正常”结果。

      SELECT 语句是 SQL 中的一个查询,所以真的不清楚你为什么要尝试使用 Execute<b>Non</b>Query 执行一个查询。

      【讨论】:

      • 如果他想返回行,ExecuteScalar 不是这样做的。 ExecuteScalar 返回第一行的第一列。
      • @Sani:是的 - 我不清楚他真正确实想要什么。这就是我提到 ExecuteScalar 和 ExecuteReader 的原因。
      • 编辑的答案好多了... :)
      【解决方案3】:

      ExecuteNonQuery()用于insert, update or delete之类的非查询操作,不能用于select之类的查询操作。为了从DB 获取记录,请使用SqlDataReaderSqlDataAdapterSqlDataReader 提供更好的性能。看看这个描述SqlDataReader的链接。

      【讨论】:

        【解决方案4】:

        使用ExecuteReader()SqlDataAdapter() 获取行。

        【讨论】:

        • 我不需要获取任何行;我只想知道我的选择语句有结果:这里是我的代码:SqlConnection conn = getConnection(); SqlCommand 命令 = 新 SqlCommand(); command.CommandText = //这里选择带有参数的语句 command.Parameters.AddWithValue("@FromDate", _DateFrom);命令.连接=连接; conn.Open(); if (command.ExecuteNonQuery() > 0) 返回真;否则返回假; conn.Close();
        猜你喜欢
        • 2016-11-21
        • 2019-10-10
        • 2014-04-13
        • 2017-03-20
        • 2013-11-04
        • 2011-12-09
        • 2012-07-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多