2017-09-16 59 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

相关问题