2013-02-22 196 views
1

这是我的代码:为什么我不能ExecuteNonQuery()?

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

嗯,这_is_查询。你为什么要使用它? – Oded 2013-02-22 18:49:23

回答

9

这是正确的代码对于SqlDataReader

dr = cmd.ExecuteReader(); 

ExecuteNonQuery()仅用于那些不查询(惊讶,意外)的事情,即SQL命令不返回数据(如UPDATE和DELETE)。

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

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

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

+0

它告诉我ExecuteReader:连接属性尚未初始化。 – 2013-02-22 18:50:24

+0

您需要打开连接并将其分配给命令。见编辑的答案。 – 2013-02-22 18:51:19

+0

作品!!!! THANQ – 2013-02-22 19:00:54

1

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

您可以使用

ExecuteReader(); 

更多文档MSDN

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

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

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

} 
1

的ExecuteNonQuery

ExecuteNonQuery方法将返回与INSERT实现的行数,删除或更新操作。此ExecuteNonQuery方法将仅用于插入,更新和删除,创建和SET语句。

的ExecuteScalar

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

的ExecuteReader

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

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

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