2015-09-17 40 views
0

我的同学说我有很多连接,但我尝试删除并添加一些连接,但没有任何作用。我总是得到“连接必须有效并且打开”或者“连接已经打开”以及“在命令执行期间遇到致命错误”,我希望你们能帮助我。连接必须有效并打开才能保存到MySql

这是我的储蓄部分,我把它放在了transact_button,所以在收银员计算出物品后,信息必须在mysql数据库中,这样我才能创建一个水晶报告。

 try 
     { 
     string id = products_lv.SelectedItems[0].Text; 
     string name = products_lv.SelectedItems[0].SubItems[1].Text; 
     string price = products_lv.SelectedItems[0].SubItems[2].Text; 
     string qty = products_lv.SelectedItems[0].SubItems[4].Text; 



      sql_connect.Close(); 
      sql_connect.Open(); 
      sql_command = new MySqlCommand("insert into transaction_cashier(orderid,productid,productname,price,quantity,total,vat,subitems,payment,change) values (@orderid,@produtid,@productname,@price,@quantity,@total,@vat,@subitems,@payment,@change)"); 
      sql_command.ExecuteReader(); 
      sql_connect.Close(); 
      sql_connect.Open(); 
      sql_command.Connection = sql_connect; 
      sql_command.Parameters.AddWithValue("@orderid", id_num.Text); 
      sql_command.Parameters.AddWithValue("@productid", id.ToString()); 
      sql_command.Parameters.AddWithValue("@productname", name.ToString()); 
      sql_command.Parameters.AddWithValue("@price", price.ToString()); 
      sql_command.Parameters.AddWithValue("@quantity", qty.ToString()); 
      sql_command.Parameters.AddWithValue("@vat", vat_txt.Text); 
      sql_command.Parameters.AddWithValue("@subitems", subitems_txt.Text); 
      sql_command.Parameters.AddWithValue("@payment", payment_txt.Text); 
      sql_command.Parameters.AddWithValue("@change", change_txt.Text); 
      sql_connect.Open(); 
      sql_command.ExecuteNonQuery(); 
      sql_connect.Close(); 
      MessageBox.Show("Saved"); 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Transaction cashier error: " + ex.Message); 
     } 
    } 

希望你们能帮助我,并且非常感谢。

+0

你真的有这么多的连接,尝试打开一次,并最终关闭一次。 – Kuroi

回答

1

你有一个开放的连接,但你永远不会把它与你的命令关联。该命令必须有一个连接才能执行。创建命令时,必须将连接传递给构造函数,否则请设置Connection属性。

你的代码很荒谬,因为它是。以下是事件序列:

  1. 创建连接。
  2. 创建该命令并将其与连接相关联。
  3. 将参数添加到命令中。
  4. 打开连接。
  5. 执行该命令。
  6. 关闭连接。

您应该使用using语句来创建连接,然后它会在块放置后自动关闭,例如,

using (var connection = new MySqlConnection("connection string here")) 
using (var command = new MySqlCommand("SQL code here", connection)) 
{ 
    command.Parameters.AddWithValue("@ParamName", paramValue); 

    try 
    { 
     connection.Open(); 
     command.ExecuteNonQuery(); 
    } 
    catch 
    { 
     // ... 
    } 
} 
相关问题