2015-09-17 88 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 
    { 
     // ... 
    } 
} 
相關問題