我有一个数组,其中包含产品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'已经被声明。变量名在查询批处理或存储过程中必须是唯一的。”
我真的不知道如何解决这个问题......请帮忙
答案 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#的一些内容,以便在脑海中刷新它们。