C# 为每个复选框列表选择触发单独的插入。
我有一个表单,用户可以用一些信息选择要设置的行。我希望用户能够选择他们需要的所有行,然后为每个选择执行单独的insert语句作为参数值。例如,用户选择第2、3和25行。我需要触发insert语句3次,每次都将@line参数更改为所选的下一行。我该怎么做?这就是我所能做到的C# 为每个复选框列表选择触发单独的插入。,c#,asp.net,sql-server,checkboxlist,C#,Asp.net,Sql Server,Checkboxlist,我有一个表单,用户可以用一些信息选择要设置的行。我希望用户能够选择他们需要的所有行,然后为每个选择执行单独的insert语句作为参数值。例如,用户选择第2、3和25行。我需要触发insert语句3次,每次都将@line参数更改为所选的下一行。我该怎么做?这就是我所能做到的 protected void btn_test_Click(object sender, EventArgs e) { SqlCommand cmd = new Sql
protected void btn_test_Click(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "Insert into t_ap_line_setup (line,date) values (@line,getdate())";
//string strLines = "";
// cmd.Parameters.Add("@line", SqlDbType.Int).Value = Convert.ToInt32(strLines);
cmd.Connection = this.sqlConnection1;
this.sqlConnection1.Open();
for (int i = 0; i < lines_list.Items.Count; i++)
{
if (lines_list.Items[i].Selected)
{
cmd.Parameters.Add("@line", SqlDbType.Int).Value = Convert.ToInt32(lines_list.Items[i].Text);
cmd.ExecuteNonQuery();
}
}
this.sqlConnection1.Close();
}
受保护的无效btn\u测试\u单击(对象发送方,事件参数e)
{
SqlCommand cmd=新的SqlCommand();
cmd.CommandText=“插入t_ap_line_设置(line,date)值(@line,getdate())”;
//字符串strLines=“”;
//cmd.Parameters.Add(“@line”,SqlDbType.Int).Value=Convert.ToInt32(strLines);
cmd.Connection=this.sqlConnection1;
this.sqlConnection1.Open();
对于(int i=0;i
使用上面的逻辑还有一件事,我得到了两个插入,它只适用于一个选择。有人能给我指出正确的方向吗 您可以使用循环:
var selectedLines = CheckBoxList1.Items.Cast<ListItem>()
.Where(li => li.Selected)
.Select(li => li.Text);
using (var con = new SqlConnection(connectionString))
using (var cmd = new SqlCommand("Insert into t_ap_line_setup (line,date) values (@line,getdate())", con))
{
con.Open();
foreach (string line in selectedLines)
{
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue("@line", int.Parse(line));
cmd.ExecuteNonQuery();
}
}
var selectedLines=CheckBoxList1.Items.Cast()
.Where(li=>li.Selected)
.Select(li=>li.Text);
使用(var con=newsqlconnection(connectionString))
使用(var cmd=new SqlCommand(“插入t_ap_line_setup(line,date))值(@line,getdate())”,con))
{
con.Open();
foreach(选定行中的字符串行)
{
cmd.Parameters.Clear();
cmd.Parameters.AddWithValue(“@line”,int.Parse(line));
cmd.ExecuteNonQuery();
}
}
请注意,我使用了
using语句
,以确保连接一完成就被释放(关闭)(即使在异常情况下)。这比使用“全局”连接(尤其是在ASP.NET中)要好。最好使用大容量插入,而不是插入每个记录
我会在这里给你发代码
创建一个数据表,如dtDetail,它在t\U ap\U line\U设置表中具有相同的字段。
循环检查复选框列表并用值填充dtDetail DATABLE
// Code for bulk insert
if (dtDetail.Rows.Count > 0)
{
string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
SqlBulkCopy bulk = new SqlBulkCopy(connectionString);
bulk.DestinationTableName = "t_ap_line_setup";
bulk.WriteToServer(dtDetail);
}
上述代码的优点是,它将减少sql server trip。提高生产效率。我遇到了以下错误:错误1“System.Web.UI.WebControl.ListItemCollection”不包含“Cast”的定义,如果您在.NET 2上,请使用简单的循环替换Linq查询(如原始代码中所示)。但也许您只需要使用System.Linq;添加
。有没有一种方法可以在不使用强制转换的情况下获取值?是的,只需像上面那样使用循环即可。