0

我有一个表单,用户选择要设置一些信息的行。我希望用户能够选择他们需要的所有行,然后为每个选择执行单独的插入语句作为参数的值。例如用户选择第 2,3 和 25 行。我需要执行 3 次插入语句,并且每次将 @line 参数更改为选中的下一行。我该怎么做?这是我所得到的。

        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();
        }

上述逻辑的另一件事是我得到两个插入,它只适用于一个选择。有人能指出我正确的方向吗?

4

2 回答 2

0

您可以使用循环:

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();
    }
}

请注意,我已经使用using-statement来确保在我完成连接后立即处理(关闭)连接(即使在出现异常的情况下)。这比使用“全局”连接更好(我希望它不是静态的)。在 ASP.NET 中更是如此。

于 2012-12-04T23:17:44.243 回答
0

最好使用批量插入而不是插入每条记录。

我会在这里给你发送代码。

创建一个数据表,说 dtDetail,它在 t_ap_line_setup 表中具有相同的字段。遍历 checkboxlist 并用值填充 dtDetail 数据表。

// 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的跳闸,提高了生产力。

于 2012-12-05T08:51:12.057 回答