【问题标题】:Save/Retrieve/Compare CheckboxList values from DB保存/检索/比较 DB 中的 CheckboxList 值
【发布时间】:2014-12-07 19:06:14
【问题描述】:

我不确定我想要的是否可能,但到目前为止我没有运气......

我正在使用 Visual Studio、asp.net 和 SQL。 varchar(max) 类型的表中的字段...

我想要做的是将 CheckBoxList 的值保存到数据库中并检索它们以在 SQL 命令中比较它们以从数据库中的表中过滤一些值。

我举个例子就更容易理解了:

所以我在代码的 HTML 端有这些。

<asp:CheckBoxList ID="CheckBoxList1" runat="server" onselectedindexchanged="CheckBoxList1_SelectedIndexChanged">
        <asp:ListItem Value="1">Sales</asp:ListItem>
        <asp:ListItem Value="2">Administration</asp:ListItem>
        <asp:ListItem Value="3">Help</asp:ListItem>
</asp:CheckBoxList>

这是保存数据的代码

protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
{
        TextBox20.Text = "";
        string s = null;

        for (int i = 0; i < CheckBoxList1.Items.Count; i++)
        {
            if (CheckBoxList1.Items[i].Selected)
                s += CheckBoxList1.Items[i].Value + ",";

            TextBox20.Text = s;
        }
    }

现在,当有人选择两个选项时,例如 SalesAdministration,我希望将值 1,2 存储在数据库中的单个列中。

然后检索值,使用 SQL 显示在我想要的列中有销售或管理/销售和管理的行。

我不确定我是否以正确的方式进行此操作..但任何帮助将不胜感激....我读到创建一个包含我需要的所有值的表是正确的方式..但我不知道如何它有效..

【问题讨论】:

  • 如果您发布代码、XML 或数据示例,在文本编辑器中突出显示这些行并单击编辑器上的“代码示例”按钮 ({ })工具栏以很好地格式化和语法突出显示它!
  • 这就是我所做的,不知道出了什么问题..事情太糟了...谢谢您纠正它..
  • 提示:在单个列(“1,2”)中存储多个值通常是个坏主意。它使以后的查询变得非常复杂,例如查找所有工程师而非销售人员的管理员。使用单独的表格,例如UserRoles,并将其与 User 数据连接是一种常见的方法。
  • 对不起,我仍然没有得到最后的部分......我做了一个表,用户和兴趣表......用户表有 UID,兴趣表有 IID.. 意味着我需要加入表使用这 2 个 ID?然后当用户注册时,我怎么知道哪个用户有哪些兴趣?如果我制作了一个单独的表格,我不知道 1 个用户如何选择更多选项
  • 查看SQLFiddle 以获取有关如何执行某些查询的示例。您将如何使用一列中的数字列表来处理它们?您会假设列中的数字已排序吗?为一个用户添加或删除一个角色怎么样?

标签: c# sql asp.net database checkboxlist


【解决方案1】:

首先,我建议使用 StringBuilder 类在循环内进行字符串连接,因为它更有效 -

对于执行大量字符串操作的例程(例如在循环中多次修改字符串的应用程序),反复修改字符串可能会导致显着的性能损失。另一种方法是使用 StringBuilder,它是一个可变字符串类。

MSDN StringBuilder Class Documentation

我同意 HABO 的上述评论,将逗号分隔的值存储在单个列中几乎总是一个坏主意。您可能应该创建一个名为 User 的类。提供 User 类属性,例如“名称”和“角色”。

关于这个数据的数据库结构,我再次同意HABO,推荐两张表。用户和用户角色。在 User 表中,您可以存储 Id、Username、Age 等数据。然后您可以在 UserRoles 表中存储 UserId(来自 User 表的 Id),这样可以为用户分配多个角色。

如果您想了解更多细节,请随时询问,我会尝试提供示例架构等。

【讨论】:

  • 我觉得我这样做完全是错误的方式......我现在得到这个概念......如果有人可以发布一个在 asp 中使用复选框列表/数据库的示例,那将非常有帮助。网..
  • 您能否提供更多关于您如何与数据库交互的信息? (例如,您使用的是实体框架吗?)
  • 对不起,我的愚蠢,不知道它是什么......我使用Visual Studio 2010中内置的SQL数据库系统,我认为它被称为SQL Express
  • 为了在 SQL Express 中与数据库交互,有几个选项可用。我会为您正在做的事情推荐 Entity Framework,因为它可以轻松地将数据库对象(即行和列)映射到您可以在代码中使用的 C# 对象。希望这会有用 - msdn.microsoft.com/en-gb/data/ee712907#getstarted
猜你喜欢
  • 1970-01-01
  • 2019-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
  • 2021-11-18
  • 2018-10-08
  • 1970-01-01
相关资源
最近更新 更多