如何在sqlserver中的一个表单元格中插入多个值

本文关键字:一个 表单 单元格 插入 sqlserver | 更新日期: 2023-09-27 18:21:49

我的网站中有一个listbox项目,selectionmode为"multiple"。单击提交按钮时,我希望将所有选定的项目插入到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>

这怎么可能?请帮忙。

如何在sqlserver中的一个表单元格中插入多个值

你可能不想这样做,因为你会打破第一种范式。相反,将关系建模为多对多可能更有意义。

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

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

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参数来防止sql注入。using-语句用于确保连接尽快关闭(即使发生异常)。

然而,这个要求没有什么意义。当用户选择主数据的一部分时,为什么要插入主数据?听起来好像你真的想插入到另一个链接到语言表的表中。

例如:

表1:UserLanguagesUserID+LanguageID

表2:Languages与上述型号

将所有值合并并放入一列根本不是一个好主意。。。如上所述,它甚至不满足数据规范化的1NF条件,其结果是磁盘空间使用效率低下,查询速度缓慢(据我所知,从这样的表中获取结果真的很混乱)。但是,如果你仍然想这样做,你可以尝试用delimeter(,或/)连接这些值,并插入它们,以便在稍后阶段根据需要进行拆分。。