为什么我不能ExecuteNonQuery()?

时间:2013-02-22 18:46:58

标签: c# sql-server winforms combobox

这是我的代码:

   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;

6 个答案:

答案 0 :(得分:9)

这是SqlDataReader的正确代码:

dr = cmd.ExecuteReader();

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

您还需要为该命令分配连接。

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

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

答案 1 :(得分:1)

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

您可以使用

ExecuteReader();

MSDN

上的更多文档

答案 2 :(得分:1)

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

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();
    }
}

答案 3 :(得分:1)

的ExecuteNonQuery

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

的ExecuteScalar

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

的ExecuteReader

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

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

drIdataReader(DataReader),因此您无法使用ExecuteNonQuery .....而不是使用此ExecuteReader

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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();

}