c# - 插入 SQL 数据库,在带有复选框列表的 foreach 中

标签 c# sql foreach sql-insert

我有这个,并在另一个使 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 statement自动处理您的连接和命令,而不是手动调用 CloseDispose 方法。

关于c# - 插入 SQL 数据库,在带有复选框列表的 foreach 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35339696/

相关文章:

c# - SqlParameter DbType.Date -> SqlDbType.DateTime 转换

mysql - MySQL 中子查询的聚合结果不保留我的字段之一

c# - 使用 Roslyn 创建诊断分析器时缺少包

php - 更新 mysql 表中的部分值

mysql - 我的 SQL 查询这么慢是否正常?

php - 显示逗号分隔值的名称

java - IntelliJ IDEA 建议用 foreach 方法替换 for 循环。我应该尽可能这样做吗?

javascript - 使用 fetch 和 forEach 对动态 HTML 进行事件绑定(bind)

c# - ExcelDataReader 错误

c# - 在不更改 url 的情况下显示自定义页面