将arraylist值插入数据库

时间:2011-11-21 09:48:41

标签: c# asp.net

我在我的项目中使用了一个复选框列表.am使用下面的代码将所有选中的项值存储在arraylist中

 ArrayList  services= new ArrayList();
for (int i = 0; i < chkservices.Items.Count; i++)
        {
            if (chkservices.Items[i].Selected == true)
            {
                services.Add(chkservices.Items[i].Text+',');
            }
        }

现在的问题是当我将数据插入数据库而不是arraylist中的数据时,它会被插入为&#39; System.Collections.ArrayList &#39;如何在单个插入语句中将所有值插入数据库?

修改

插入数据库

con.Open();
        SqlCommand cmd = new SqlCommand("insert into XXX(First_Name,Last_Name,ServicesProvided) values ('" + txtfrstname.Text + "','" + txtlastname.Text + "','" + services + "')", con);
        cmd.ExecuteNonQuery();
        con.Close();

或者是否有人可以为我提供arraylist的替代选择..我需要保存来自复选框列表的已检查项目并将其保存在数据库中

it should be saved in database as

  First_Name             Last_name                 ServicesProvided
user1firstname        user1lastname               selectedvalue1,
                                              selectedvalue2,selectedvalue3

4 个答案:

答案 0 :(得分:2)

为什么不使用以下代码连接数据:

 var mydata = String.Join(',', chkservices.Items
   .Where( a => a.Selected).Select( b => b.Text));

因此,您可以将数据添加为字符串。

修改 连接字符串以进行查询是一个非常糟糕的习惯!除了你的情况下的许多副作用,这是一个很大的安全漏洞。请尝试参数化查询:

     SqlCommand cmd = new SqlCommand(
         @"insert into XXX(First_Name,Last_Name,ServicesProvided) values 
         (@First_Name,@Last_Name,@ServicesProvided")", con); 
      cmd.Parameters.AddWithValue("@ServicesProvided", mydata);
      cmd.Parameters.AddWithValue("@First_Name", frstname.Text);
      cmd.Parameters.AddWithValue("@Last_Name", txtlastname.Text);
    cmd.ExecuteNonQuery();

mydata是我第一个例子中的变量。

答案 1 :(得分:0)

您需要获取数组列表的值并逐个发送

或创建一个存储过程,您可以使用Alexanders Galkins示例(或使用聚合方法)将所有值发送到该存储过程。然后使用split函数拆分字符串并插入所有记录

答案 2 :(得分:0)

使用INSERT INTO语句,您一次只能插入一行,除非您使用子查询从其他表中选择数据。

由于您没有数据库中的数据,您唯一的选择是迭代数组并将每个值作为新行插入。

不要使用ArrayList,你有所需的通用列表:

List<string> services = new List<string>();
for (int i = 0; i < chkservices.Items.Count; i++)
{
    if (chkservices.Items[i].Selected == true)
    {
        services.Add(chkservices.Items[i].Text);
    }
}

//...connection stuff....
strSQL = "INSERT INTO MyTable (MyField) VALUES (@val)"
using (SqlCommand command = new SqlCommand(strSQL, connection))
{
    command.Parameters.AddWithValue("@val", "");
    foreach (string service in services)
    {
        command.Parameters["@val"].Value = service;
        command.ExecuteNonQuery();
    }
}

答案 3 :(得分:0)

你有多少个复选框?如果您只有一个小复选框,那么我建议您将它们的每个状态转换为代表数字的位掩码,然后将其存储到数据库中。

long bitMask = 0; // All uncheck
for (int i = 0; i < chkServices.Items.Count; ++i) {
    if (chkServices.Items[i].Checked) {
        bitMask |= (1 << i);
    }
}

// Store bitMask to Database

稍后,您可以在需要时再次通过bitMask获取状态。