Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从数据库保存/检索/比较复选框列表值_C#_Sql_Asp.net_Database_Checkboxlist - Fatal编程技术网

C# 从数据库保存/检索/比较复选框列表值

C# 从数据库保存/检索/比较复选框列表值,c#,sql,asp.net,database,checkboxlist,C#,Sql,Asp.net,Database,Checkboxlist,我不确定我想要的是否可能,但到目前为止我没有运气 我正在使用Visual Studio、asp.net和SQL。varchar(max)类型的表中的字段 我要做的是将CheckBoxList的值保存到数据库中,并在SQL命令中检索它们以比较它们,从而从数据库中的表中筛选一些值 当我举一个例子时,更容易理解: 所以我在代码的HTML端有这些 <asp:CheckBoxList ID="CheckBoxList1" runat="server" onselectedindexchanged="

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

我正在使用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;
        }
    }
protectedvoid CheckBoxList1\u SelectedIndexChanged(对象发送方,事件参数e)
{
TextBox20.Text=“”;
字符串s=null;
对于(int i=0;i
现在,当有人选择两个选项时,例如
Sales
Administration
,我希望值1,2存储在数据库中的一列中

然后使用SQL show行检索这些值,这些行在我想要的列中包含Sales或Administration/Sales和Administration。


我不确定我的做法是否正确。。但任何帮助都将不胜感激。。。。我读到,创建一个包含我需要的所有值的表是正确的方法。。但我不知道它是怎么工作的

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

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

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

关于这些数据的数据库结构,我再次同意民政事务局的意见,建议使用两个表格。用户和用户角色。在用户表中,您可以存储Id、用户名、年龄等数据。然后,您可以在UserRoles表中存储UserId(用户表中的Id),这样就可以为用户分配多个角色


如果您想了解更多详细信息,请随时询问,我将尝试提供示例模式等。

如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮(
{}
),以很好地格式化和语法突出显示它!我就是这么做的,不知道出了什么问题。。事情搞得一团糟。。。提示:在一列中存储多个值(“1,2”)通常是个坏主意。这会使以后的查询变得非常复杂,例如查找所有不是销售人员的工程师管理员。使用单独的表,例如
用户角色
,并将其与
用户
数据连接是一种常见的方法。很抱歉,我仍然没有得到结尾部分。。。我做了一个表,用户和一个表的兴趣。。。用户表有UID,兴趣表有IID。。意味着我需要使用这两个ID连接表?然后,当用户注册时,我如何知道哪个用户有哪些兴趣?如果我做了一个单独的表格,我不知道1个用户如何选择更多选项检查如何执行一些查询的示例。你会如何在一列中列出数字?你会假定一列中的数字已排序吗?为一个用户添加或删除一个角色如何?我觉得我这样做完全是错误的。。。我现在明白了。。。如果有人能在asp.net中发布一个使用checkboxlist/database的示例,那将非常有帮助。您能提供一些关于如何与DB交互的更多信息吗?(例如,您使用的是实体框架吗?)。。。我正在使用VisualStudio2010中内置的SQL数据库系统,我认为它被称为SQL Express为了在SQL Express中与数据库交互,有几个选项可用。我建议您使用实体框架,因为它可以很容易地将数据库对象(即行和列)映射到可以在代码中使用的C#对象。希望这将是有用的-