我在我的项目中使用了一个复选框列表.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
答案 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获取状态。