1

这是我的代码:

   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;
4

6 回答 6

9

这是 a 的正确代码SqlDataReader

dr = cmd.ExecuteReader();

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

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

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

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

于 2013-02-22T18:48:56.843 回答
1

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

您可以使用

ExecuteReader();

MSDN上的更多文档

于 2013-02-22T18:51:15.083 回答
1

您应该使用SqlDataReaderandExecuteReader方法从 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();
    }
}
于 2013-02-22T18:54:37.187 回答
1

执行非查询

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

执行标量

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

执行阅读器

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

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

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

于 2013-02-23T10:04:52.450 回答
0

使用cmd.ExecuteReader()而不是cmd.ExecuteNonQuery()

于 2013-02-22T18:59:43.287 回答
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();

}
于 2013-02-23T00:00:02.067 回答