从C#Array循环SQL插入

时间:2014-03-02 22:36:10

标签: c# sql

我有一个数组,其中包含产品ID和数量,作为购物篮。

我现在的循环允许我在数组计数为1时将数据插入到我的表中:

var p = Basket.arrayList;

    for (int i = 0; i < p.Count; i++)
        // Loop through List 
    {
        var ProductId = p[i][0];
        var Quantity = p[i][1];
        itemsQueryCommand.CommandText = "INSERT INTO tOrderItems (orderId, name, quantity) VALUES (@OrderId, @name, @quantity )";
        itemsQueryCommand.Parameters.AddWithValue("@OrderId", id);
        itemsQueryCommand.Parameters.AddWithValue("@name", ProductId);
        itemsQueryCommand.Parameters.AddWithValue("@quantity", Quantity);

        itemsQueryCommand.ExecuteNonQuery();
    }

如果数组保持不超过1,则会抛出错误说; “变量名'@OrderId'已经被声明。变量名在查询批处理或存储过程中必须是唯一的。”

我真的不知道如何解决这个问题......请帮忙

3 个答案:

答案 0 :(得分:2)

Dispose在每次迭代时使用using语句执行命令并创建一个新命令:

for (int i = 0; i < p.Count; i++)
{
    var ProductId = p[i][0];
    var Quantity = p[i][1];
    using(var cmd = new SqlCommand())
    {
        cmd.Connection = connection; // <-- don't forget to set connection
        cmd.CommandText = "INSERT INTO tOrderItems (orderId, name, quantity) VALUES (@OrderId, @name, @quantity )";
        cmd.Parameters.AddWithValue("@OrderId", id);
        cmd.Parameters.AddWithValue("@name", ProductId);
        cmd.Parameters.AddWithValue("@quantity", Quantity);
        cmd.ExecuteNonQuery();
    }

}

答案 1 :(得分:0)

这样的事情:

var p = Basket.arrayList;

itemsQueryCommand.CommandText = "INSERT INTO tOrderItems (orderId, name, quantity) VALUES (@OrderId, @name, @quantity )";
itemsQueryCommand.Parameters.Add("@OrderId");
itemsQueryCommand.Parameters.Add("@name");
itemsQueryCommand.Parameters.Add("@quantity");


for (int i = 0; i < p.Count; i++)
    // Loop through List 
{
    itemsQueryCommand.Parameters["@OrderId"] = id;
    itemsQueryCommand.Parameters["@name"] =  p[i][0]; // ProductId;
    itemsQueryCommand.Parameters["@quantity"] = p[i][1]; //Quantity;

    itemsQueryCommand.ExecuteNonQuery();
}

答案 2 :(得分:0)

与其他答案一样,您的错误表明,您正在重复使用参数值(因此您的'@OrderId'会被多次添加)。

每次都创建一个新命令(serman22解决方案),或者仅重用命令值(如hogan建议的那样)。

在任何一种情况下,我都建议您阅读有关sql命令和C#的一些内容,以便在脑海中刷新它们。