2014-12-07 160 views
3

比较CheckBoxList的值,我不知道如果我想是可以的,但到目前为止,我还没有运气...保存/恢复/从DB

我使用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被存储在数据库中单列。

然后使用具有Sales或Administration/Sales和Administration的SQL显示行检索值。

我不知道我是否正在以正确的方式进行..但任何帮助将不胜感激....我读了创建一个表,我需要的所有值是他们正确的方式..但我说不上来它是如何工作..

+0

如果您发布的代码,XML或数据样本,** **请在高亮文本编辑器的线和点击编辑器工具栏上的“代码示例”按钮(“{}”),以精确地格式化和语法突出显示它! – 2014-12-07 19:16:23

+0

这就是我所做的,不知道出了什么问题..事情是如此搞砸了...谢谢你纠正它.. – Rifshan 2014-12-07 19:18:23

+1

提示:将多个值存储在一个列(“1,2”)通常是一个坏主意。这会使查询稍后复杂化,例如找到所有工程师而不是销售人员的管理员。使用单独的表格,例如'UserRoles',并将其与'User'数据结合是一种常见的方法。 – HABO 2014-12-07 19:31:35

回答

1

首先,我会建议使用StringBuilder类的做一个循环中字符串连接,因为它是更有效 -

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

MSDN StringBuilder Class Documentation

我上面由哈勃提出的意见一致,在一列存储逗号分隔值几乎总是一个坏主意。您应该创建一个名为User的类。给予用户类属性,如“名称”和“角色”。

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

如果您想了解更多的细节随时问,我会尽力,并提供示例模式等

+0

我觉得我这样做完全是错误的方式...我现在得到的概念...如果任何人都可以发布一个在asp.net中使用checkboxlist/database的例子,这将是非常有帮助的。 – Rifshan 2014-12-08 03:09:27

+0

你能给关于你如何与数据库交互的更多信息? (例如你使用实体框架?) – MaxRev17 2014-12-08 12:13:19

+0

对不起,我不知道它是什么...我使用Visual Studio 2010中的内置SQL数据库系统,我认为它被称为SQL Express – Rifshan 2014-12-08 16:36:32