【问题标题】:Why can't I ExecuteNonQuery()?为什么我不能 ExecuteNonQuery()?
【发布时间】:2013-02-08 11:30:54
【问题描述】:

这是我的代码:

   private void loadlist()
   {
      comboBox1.Items.Clear();
      cn.Open();
      cmd.CommandText = "Select * from info";
      dr = cmd.ExecuteNonQuery();
      if (dr.HasRows)
      {
         while (dr.Read())
         {
            comboBox1.Items.Add(dr[0].ToString());
         }
         cn.Close();
      }
    }

错误发生在这一行:

dr = cmd.ExecuteNonQuery();

我正在使用System.Data.SqlClient;

和:

SqlConnection cn = new SqlConnection(@"//HERE IS MY STRING CONNECTION");
SqlCommand cmd = new SqlCommand();
SqlDataReader dr;

【问题讨论】:

  • 嗯,它一个查询。为什么要使用它?

标签: c# sql-server winforms combobox


【解决方案1】:

这是SqlDataReader 的正确代码:

dr = cmd.ExecuteReader();

ExecuteNonQuery() 仅用于(惊喜、惊喜)查询,即不返回数据的 SQL 命令(如 UPDATE 和 DELETE)。

您还需要将连接分配给命令。

cmd.Connection = cn;
cn.Open();

您还应该记住在完成后关闭阅读器和连接。或者使用using

【讨论】:

  • 它告诉我 ExecuteReader:连接属性尚未初始化。
  • 您需要打开连接并将其分配给命令。请参阅编辑后的答案。
【解决方案2】:

ExecuteNonQuery 针对连接执行 Transact-SQL 语句并返回受影响的行数,例如 UPDATE、INSERT 或 DELETE 请参阅MSDN

你可以使用

ExecuteReader();

更多文档在MSDN

【讨论】:

    【解决方案3】:

    您应该使用SqlDataReaderExecuteReader 方法从选择语句中读取数据行。示例:

    private static void ReadOrderData(string connectionString)
    {
        string queryString =
            "SELECT OrderID, CustomerID FROM dbo.Orders;";
    
        using (SqlConnection connection =
                   new SqlConnection(connectionString))
        {
            SqlCommand command =
                new SqlCommand(queryString, connection);
            connection.Open();
    
            SqlDataReader reader = command.ExecuteReader();
    
            // Call Read before accessing data.
            while (reader.Read())
            {
                Console.WriteLine(String.Format("{0}, {1}",
                    reader[0], reader[1]));
            }
    
            // Call Close when done reading.
            reader.Close();
        }
    }
    

    【讨论】:

      【解决方案4】:

      ExecuteNonQuery

      ExecuteNonQuery 方法将返回受 INSERT、DELETE 或 UPDATE 操作影响的行数。此 ExecuteNonQuery 方法将仅用于插入、更新和删除、创建和 SET 语句。

      ExecuteScalar

      执行标量将在使用命令对象执行 SQL 查询或存储过程时返回单行单列值,即单值。从数据库中检索单个值非常快。

      ExecuteReader

      Execute Reader 将用于在使用命令对象执行 SQL 查询或存储过程时返回行集。这是只向前检索记录,它用于从第一个到最后一个读取表值。

      在你的情况下dr = cmd.ExecuteNonQuery();

      drIdataReader(DataReader) 所以你不能使用 ExecuteNonQuery..... 而不是这个使用 ExecuteReader

      【讨论】:

        【解决方案5】:

        使用cmd.ExecuteReader() 代替cmd.ExecuteNonQuery()

        【讨论】:

          【解决方案6】:

          试试这段代码,一切都会好起来的。

          private void loadlist()
          {
            comboBox1.Items.Clear();
            cn.Open();
            cmd.CommandText = "Select * from info";
            dr = cmd.ExecuteReader()
          
               while (dr.Read())
               {
                  comboBox1.Items.Add(dr.GetString(0));
               }
            cn.Close();
          
          }
          

          【讨论】:

            猜你喜欢
            • 2011-02-19
            • 1970-01-01
            • 2016-03-16
            • 2017-06-01
            • 2012-03-15
            • 2018-10-24
            • 2016-06-01
            • 2020-08-05
            • 1970-01-01
            相关资源
            最近更新 更多