4

我的 Windows 应用程序中有许多代码块,它们使用相同的结构来执行查询。在我的代码中添加了一些新内容后,由于错误,这些内容不再起作用:

“ExecuteNonQuery:连接属性尚未初始化”

代码块看起来像这样:

sc.Open();
cmd = new SqlCommand("UPDATE bin SET serialNumber=" + tb_computername.Text + " WHERE binNumber=" + binNumber);
cmd.ExecuteNonQuery();
sc.Close();
break;

新代码这样做:

//Find Open BIN
int binNumber = 0;
int binIndex = 0;
string queryString = "SELECT * FROM bin";
SqlDataAdapter adapter = new SqlDataAdapter(queryString, scb);
DataSet binNumbers = new DataSet();
adapter.Fill(binNumbers, "bin");
for (int i = 0; i < 150; i++)
{
    binNumber++;                    
    if(binNumbers.Tables["bin"].Rows[binIndex]["serialNumber"].ToString() == "")
{
sc.Open();
cmd = new SqlCommand("UPDATE bin SET serialNumber=" + tb_computername.Text + " WHERE binNumber=" + binNumber);
cmd.ExecuteNonQuery();
sc.Close();
break;
}
binIndex++;

这些连接在类的顶部定义。

4

2 回答 2

3

您需要为其分配一个SqlConnection对象。

 cmd.Connection = connection;

您的连接字符串等connection的对象在哪里?SqlConnection

同样为了良好的实践,您应该将其包装在using

 using (SqlConnection connection = new SqlConnection("ConnectionString")) { 
     cmd.Connection = connection;
 } 

和参数化查询以防止 SQL 注入攻击。

于 2013-09-13T13:45:30.890 回答
0

在执行之前,我们需要将 sqlconnection 对象传递给 sqlcommand 对象。

Sqlcommand 具有以下构造函数构造函数:

  1. SqlCommand()
  2. SqlCommand(字符串)
  3. SqlCommand(字符串,SqlConnection)
  4. SqlCommand(字符串、SqlConnection、SqlTransaction)
  5. SqlCommand(字符串、SqlConnection、SqlTransaction、SqlCommandColumnEncryptionSetting)

如果我们使用 1. 默认构造函数或 2. 带有一个参数(查询)的参数化构造函数,那么我们需要将连接设置为

   SqlCommand.Connection = SqlConnection;

以下是工作代码片段:

   //create a connection object
  using (SqlConnection connection = new SqlConnection(connectionString))
    {
     //create command object, and pass your string query & connection object.
     //we can call the default constructor also and later assign these values
       SqlCommand command = new SqlCommand(queryString, connection);   
    //open the connection here,
      command.Connection.Open();
    //execute the command.
      command.ExecuteNonQuery();
    }

为了确保连接始终关闭,我们应该在 using 块内打开连接,以确保在代码退出块时自动关闭连接。

于 2020-05-14T09:56:03.330 回答