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

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

问题描述:

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

金字塔是数据库表的名称。 CheckBoxListFruits是CheckBoxList控件的名称,Favorite Fruits是我尝试插入信息的列的名称。

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

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

+0

你调试了你的代码吗?你确定你的值不是'空'吗?你的'CommandText'也不需要'+'。 – 2014-10-29 18:39:50

+4

*“所有选择插入到SQL数据库中的单个列中,每个选择之间用逗号分隔。”*请为所有爱情做好准备,不要这样做......阅读正常化! – mituw16 2014-10-29 18:40:38

+0

具体来说,请阅读[第一范式](http://en.wikipedia.org/wiki/First_normal_form)。你不必记住正常的形式,但认识到它们背后的原则是非常重要的。 – mason 2014-10-29 18:56:54

这是错误的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的概念,而且当您想要为该列选择/比较数据时也会遇到麻烦。

我建议有一个单独的表为最喜欢的水果,而不是一列,然后插入或相应地删除。 因此,用户(用户ID,名称)和用户喜欢userflavoritefruits(用户ID,名称)的用户表(用户ID,名称)

您的插入语句的语法是错误的,但是你陷入的问题比那种具有非规范化结构的问题要大。

祝你好运。

+0

现货。埃内斯托建立在mituw16的评论之上,重新正常化。 SQL在从表中选择数据时非常健壮 - 但在解析字段中的排列数据时,SQL没有那么高效。 – 2016-01-02 14:27:57