插入到 SQL 数据库中,在带有复选框列表的每个数据库中
本文关键字:数据库 列表 复选框 SQL 插入 | 更新日期: 2023-09-27 18:34:08
我有这个,并在另一个插入中创建了一个范围标识,使int id变量
foreach (ListItem item in CheckBoxList1.Items)
{
if (item.Selected)
{
int CheckId = Convert.ToInt32(item.Value);
cmd.CommandText = "INSERT INTO FarveTilCykel (fk_cy_id, fk_farve_id) VALUES (@cy, @farve)";
cmd.Parameters.Add("@cy", SqlDbType.VarChar).Value = id;
cmd.Parameters.Add("@farve", SqlDbType.VarChar).Value = CheckId;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
} //end if
} //end foreach
问题是(我认为)当它运行 1 次并运行第二次时,@cy
已经声明,我怎样才能让它每次都不同?
不能多次向命令添加相同的参数。您可以在每次迭代结束时Clear
参数,例如;
foreach (ListItem item in CheckBoxList1.Items)
{
...
...
cmd.Parameters.Clear();
}
或者更好的是,在foreach之前定义参数,然后在其中添加/更改它们的值。
var parameter1 = new SqlParameter("@cy", SqlDbType.VarChar);
var parameter2 = new SqlParameter("@farve", SqlDbType.VarChar);
cmd.Parameters.Add(parameter1);
cmd.Parameters.Add(parameter2);
foreach (ListItem item in CheckBoxList1.Items)
{
...
...
cmd.Parameters["@cy"].Value = id;
cmd.Parameters["@farve"].Value = CheckId;
}
还可以使用 using
语句自动释放连接和命令,而不是手动调用Close
或Dispose
方法。
地方
var p1 = cmd.Parameters.Add("@cy", SqlDbType.VarChar);
var p2 = cmd.Parameters.Add("@farve", SqlDbType.VarChar);
在 foreach 块之前和
p1.Value = id;
p2.Value = CheckId;
在块内而不是 2 条当前行。
我更喜欢打开连接 (conn) 一次并将其写入 using 语句,然后清除每条记录的参数 (cmd)。