【问题标题】:Insert multiple checkbox selections into one database column将多个复选框选择插入一个数据库列
【发布时间】:2014-10-29 18:37:22
【问题描述】:

我有一个带有 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);
    }
}

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

【问题讨论】:

  • 你调试过你的代码吗?你确定你的价值观不是null吗?您的CommandText 中也不需要+
  • “所有选择都插入到 SQL 数据库中的单个列中,每个选择都用逗号分隔。” 出于对所有事物的爱,请不要这样做。 ..阅读关于标准化!!!!
  • 具体来说,请阅读1st Normal Form。您不必记住范式,但认识到它们背后的原则非常重要。

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


【解决方案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 的概念,而且当您想要选择/比较该列的数据时也会给您带来麻烦。

【讨论】:

    【解决方案2】:

    我建议为最喜欢的水果设置一个单独的表,而不是一列,然后相应地插入或删除。 因此,一张表用于用户(userid,...),一张用于水果(id,name),一张用于用户喜欢的表,例如 userfavoritefruits(userid,fruitid)

    您的插入语句的语法是错误的,但您遇到的问题比这种非规范化结构的问题更大。

    祝你好运。

    【讨论】:

    • 正确。 Ernesto 建立在 mituw16 对重新规范化的评论之上。 SQL 在从表中选择数据方面非常强大 - 但在解析字段中的数组数据时效率远不及此。
    猜你喜欢
    • 1970-01-01
    • 2013-01-05
    • 2014-04-18
    • 1970-01-01
    • 2015-07-27
    • 2017-10-11
    • 1970-01-01
    • 2022-07-28
    • 1970-01-01
    相关资源
    最近更新 更多