0

我的listbox网站上有一个selectionmode名为“multilple”的项目。sql单击提交按钮时,我想将所有选定的项目插入服务器表中的列中。

这是我的listbox物品。

<asp:TableCell>
    <asp:ListBox ID="lbLanguagesKnown" runat="server" Height="217px" 
        SelectionMode="Multiple">
        <asp:ListItem Selected="True" Value="-1">-Select Languages-</asp:ListItem>
        <asp:ListItem Value="1">Arabic</asp:ListItem>
        <asp:ListItem Value="2">Bengali</asp:ListItem>
        <asp:ListItem Value="3">English</asp:ListItem>
        <asp:ListItem Value="4">German</asp:ListItem>
        <asp:ListItem Value="5">Hindi</asp:ListItem>
        <asp:ListItem Value="6">Japanese</asp:ListItem>
        <asp:ListItem Value="7">Javanese</asp:ListItem>
        <asp:ListItem Value="8">Mandarin</asp:ListItem>
        <asp:ListItem Value="9">Others</asp:ListItem>
        <asp:ListItem Value="10">Portuguese</asp:ListItem>
        <asp:ListItem Value="11">Russian</asp:ListItem>
        <asp:ListItem Value="12">Spanish</asp:ListItem>
    </asp:ListBox>
</asp:TableCell>

这怎么可能?请帮忙。

4

3 回答 3

5

你可能不想这样做,因为你甚至会打破第一个正常形式。相反,将关系建模为多对多可能更有意义。

在这种情况下,您将有一个Languages表、一个(例如)User表,然后是一个连接表(例如LanguagesKnown),它使用连接表中每一行的两个外键将多种语言链接到许多用户。

于 2013-07-09T11:26:31.970 回答
2

你可以使用一个简单的循环:

string sql = "INSERT INTO dbo.Language VALUES(@languageID, @languageName);";
using (var con = new SqlConnection(yourConnectionString))
using(var cmd = new SqlCommand(sql, con))
{
    con.Open();
    foreach (ListItem item in lbLanguagesKnown.Items)
    {
        cmd.Parameters.Clear();
        if (item.Selected)
        {
            cmd.Parameters.AddWithValue("@languageID", int.Parse(item.Value));
            cmd.Parameters.AddWithValue("@languageName", item.Text);
            int insertedCount = cmd.ExecuteNonQuery();
        }
    }
}

我使用 sql-parameters 来防止 sql-injection。-statementusing用于确保连接尽快关闭(即使在出现异常的情况下)。

但是,这个要求意义不大。为什么要在用户选择部分主数据时插入主数据。听起来好像您实际上想要插入链接到语言表的不同表中。

例如:

表 1:UserLanguagesUserID+LanguageID

表2:Languages与上述型号

于 2013-07-09T11:29:29.577 回答
0

组合所有值并将它们放入单个列根本不是一个好主意...如上所述,它甚至不满足数据规范化的 1NF 条件,结果将是磁盘空间使用效率低下,查询速度慢(真的很混乱根据我的理解从这样的表中得到结果)。但是,如果您仍然想这样做,您可以尝试使用分隔符(或/)连接这些值并插入它们,以便在以后需要时可以将其拆分出来。

于 2013-07-09T11:37:10.227 回答