将多个复选框选择插入一个数据库列

时间:2014-10-29 18:37:23

标签: c# sql asp.net sql-server

我有一个带有C#代码的asp.net表单,在表单上我有一个CheckBoxList。理想情况下,用户可以使用此CheckBoxList选择适用于它们的多个项目,并将所有选择插入到SQL数据库的单个列中,每个选项用逗号分隔。下面是我当前的CheckBoxList INSERT代码,但是当我在SSMS上查询SQL表时,CheckBoxList列只显示为'NULL'。

Pyramid是数据库表的名称。 CheckBoxListFruits是CheckBoxList控件的名称,Favorite Fruits是我试图将信息插入的列的名称。

using (SqlCommand cmd = new SqlCommand())
{
    cmd.CommandText = "INSERT INTO Pyramid set IsSelected = @IsSelected" + " WHERE Favorite Fruits=@Fruits";
    foreach (ListItem item in CheckBoxListFruits.Items)
    {
        cmd.Parameters.AddWithValue("@IsSelected", item.Selected);
        cmd.Parameters.AddWithValue("@Fruits", item.Value);
    }
}

我的代码有什么问题,如何解决?

2 个答案:

答案 0 :(得分:1)

这是一种错误的INSERT语法。正确的INSERT命令语法是

INSERT INTO table_name(col1,col2,col3,...,coln) VALUES(val1,val2,val3,...,valn);

您的意思是拥有UPDATE命令,如下所示

UPDATE Pyramid set IsSelected = @IsSelected WHERE [Favorite Fruits] = @Fruits;

需要注意的几点:

Favorite Fruits中有空格,因此您应该使用[ ]转义它。

@SonerGonul提到的命令文本中不需要+

@ mituw16指出一些非常重要的东西;不要在列中存储以逗号分隔的值。这不仅仅是针对Normalization概念,而且当您想要选择/比较该列的数据时也会遇到麻烦。

答案 1 :(得分:1)

我建议为喜欢的水果而不是列提供单独的表,然后相应地插入或移除。 所以用户的表(userid,...),一个用于水果(id,name),一个用于用户喜欢的用户favoritefruits(userid,fruitid)

insert语句的语法错误,但是你遇到的问题比使用这种非规范化结构的问题要大。

祝你好运。