2017-09-16 10 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!"); 
       } 
      } 
     } 

を使用して、私はある問題は、これが3リストボックスの写真です

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. 

言う[![]ここに画像の説明を入力したコード[1]です] [1]

コードで何が間違っているか私は恋しいですか?

どのように写真のように見えるかのように、各行のデータベースにデータを挿入します。

+0

この時点で、質問は最初に尋ねられたものと答えられたものから大幅に変化しています。元の問題は解決されました。この新しい問題は新しい質問になるはずです。その質問では、デバッガに表示されているパラメータに割り当てられている値を特定し、問題がどこにあるかをメモします。 – David

+0

どうもありがとうございます、ごめんなさい^^。 –

答えて

1

クエリを実行する前にループ内で同じパラメータを複数回追加し直そうとしています。ループの1回の反復でも、すべてのパラメータをの3回に追加しようとします。このエラーは、同じパラメータを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

関連する問題