保存/恢复/从DB
比较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;
}
}
现在,当某一个选择像两个选项,例如Sales
和Administration
,我想的值1,2被存储在数据库中单列。
然后使用具有Sales或Administration/Sales和Administration的SQL显示行检索值。
我不知道我是否正在以正确的方式进行..但任何帮助将不胜感激....我读了创建一个表,我需要的所有值是他们正确的方式..但我说不上来它是如何工作..
首先,我会建议使用StringBuilder类的做一个循环中字符串连接,因为它是更有效 -
对于执行大量的字符串操作例程(例如作为在循环中多次修改字符串的应用程序),重复修改字符串可能会导致严重的性能损失。另一种方法是使用StringBuilder,它是一个可变的字符串类。
MSDN StringBuilder Class Documentation
我上面由哈勃提出的意见一致,在一列存储逗号分隔值几乎总是一个坏主意。您应该创建一个名为User的类。给予用户类属性,如“名称”和“角色”。
关于这个数据的数据库结构,我再次同意HABO,推荐两个表。用户和用户角色。在用户表中,您可以存储数据,如Id,用户名,年龄等,然后您可以在UserRoles表中存储UserId(User表中的Id),这样用户可以分配多个角色。
如果您想了解更多的细节随时问,我会尽力,并提供示例模式等
如果您发布的代码,XML或数据样本,** **请在高亮文本编辑器的线和点击编辑器工具栏上的“代码示例”按钮(“{}”),以精确地格式化和语法突出显示它! – 2014-12-07 19:16:23
这就是我所做的,不知道出了什么问题..事情是如此搞砸了...谢谢你纠正它.. – Rifshan 2014-12-07 19:18:23
提示:将多个值存储在一个列(“1,2”)通常是一个坏主意。这会使查询稍后复杂化,例如找到所有工程师而不是销售人员的管理员。使用单独的表格,例如'UserRoles',并将其与'User'数据结合是一种常见的方法。 – HABO 2014-12-07 19:31:35