我有一个带有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);
}
}
我的代码有什么问题,如何解决?
答案 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语句的语法错误,但是你遇到的问题比使用这种非规范化结构的问题要大。
祝你好运。