2017-09-16 42 views
-1

我試圖從3個列表框中將所有數據插入到數據庫中的表中我不知道我是否做得很好這是我用將多個列表框中的所有數據插入到數據庫中的表中C#

private void Order() 
     { 
      using (SqlConnection connection = new SqlConnection(connectionString1)) 
      { 
       String query = "INSERT INTO Tbl_order (OrderName,Quantity,Price,Serves_way,Date) VALUES (@OrderName,@Quantity, @Price,'"+servers+"','" + time1.ToString(format1)+"')"; 

       using (SqlCommand command = new SqlCommand(query, connection)) 
       { 
        connection.Open(); 

        for (int i = 0; i < lst_OrderName.Items.Count; i++) 
        { 
         string OrderName = lst_OrderName.GetItemText(lst_OrderName.GetSelected(i)); 

         command.Parameters.AddWithValue("@OrderName", lst_OrderName.GetItemText(lst_OrderName.GetSelected(i))); 
         command.Parameters.AddWithValue("@Quantity", lst_QTY.GetItemText(lst_QTY.GetSelected(i))); 
         command.Parameters.AddWithValue("@Price", lst_Price2.GetItemText(lst_Price2.GetSelected(i))); 

         command.Parameters.Add("@OrderName", SqlDbType.NVarChar); 
         command.Parameters.Add("@Quantity", SqlDbType.Int); 
         command.Parameters.Add("@Price", SqlDbType.Money); 

         command.Parameters.Add("@OrderName", SqlDbType.NVarChar).Value = OrderName; 
         command.Parameters.Add("@Quantity", SqlDbType.Int).Value = Convert.ToInt32(lst_QTY.GetSelected(i)); 
         command.Parameters.Add("@Price", SqlDbType.Money).Value = Convert.ToDouble(lst_Price2.GetSelected(i)); 

        } 

        // command.Parameters.AddWithValue("@OrderName", lst_OrderName.GetItemText(lst_OrderName.SelectedItem)); 
        //command.Parameters.AddWithValue("@Quantity", lst_QTY.GetItemText(lst_QTY.SelectedItem)); 
        //command.Parameters.AddWithValue("@Price", lst_Price2.GetItemText(lst_Price2.SelectedItem)); 

        int result = command.ExecuteNonQuery(); 

        // Check Error 
        if (result < 0) 
         Console.WriteLine("Error inserting data into Database!"); 
       } 
      } 
     } 

的代碼和我有一個問題說

An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll 

Additional information: The variable name '@OrderName' has already been declared. Variable names must be unique within a query batch or stored procedure. 

這三個列表框的PIC [![在這裏輸入的形象描述] [1] ] [1]

代碼wha有什麼問題我錯過了嗎?

我想要數據插入數據庫中的每一行,就像它在圖片中的樣子。

+0

在這一點上,問題正在從最初提出和回答的問題發生顯着變化。原來的問題已經解決了。這個新問題看起來應該是一個新問題。在這個問題中,具體確定您在調試器中看到的分配給參數的值,並注意觀察問題的位置。 – David

+0

非常感謝你,對不起^^。 –

回答

1

您試圖在執行查詢之前多次在循環中重新添加相同的參數。即使在循環的一次迭代中,您仍嘗試將三個參數添加到。錯誤告訴你,你只能添加一次相同的參數。

將查詢的整個生命週期移至循環中。事情是這樣的:

connection.Open(); 
for (int i = 0; i < lst_OrderName.Items.Count; i++) 
{ 
    using (SqlCommand command = new SqlCommand(query, connection)) 
    { 
     command.Parameters.Add("@OrderName", SqlDbType.NVarChar).Value = OrderName; 
     command.Parameters.Add("@Quantity", SqlDbType.Int).Value = Convert.ToInt32(lst_QTY.GetSelected(i)); 
     command.Parameters.Add("@Price", SqlDbType.Money).Value = Convert.ToDouble(lst_Price2.GetSelected(i)); 
     command.ExecuteNonQuery(); 
    } 
} 

這也將瞭解如何使用交易與數據庫的好時機。這樣你可以將所有這些插入包裝在單個事務中,並根據需要提交或回滾。

+0

謝謝你,我試過你的代碼,但仍然是同樣的問題 –

+0

@MaxThunder:你能否更新問題以顯示新代碼? – David

+0

@MaxThunder:您在問題中更新的代碼不會嘗試此答案的建議。它還沒有工作,因爲你沒有按照指示修復它。 – David

相關問題