如何在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>
这怎么可能?请帮忙。
你可能不想这样做,因为你会打破第一种范式。相反,将关系建模为多对多可能更有意义。
在这种情况下,您将有一个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:UserLanguages
与UserID
+LanguageID
表2:Languages
与上述型号
将所有值合并并放入一列根本不是一个好主意。。。如上所述,它甚至不满足数据规范化的1NF条件,其结果是磁盘空间使用效率低下,查询速度缓慢(据我所知,从这样的表中获取结果真的很混乱)。但是,如果你仍然想这样做,你可以尝试用delimeter(,或/)连接这些值,并插入它们,以便在稍后阶段根据需要进行拆分。。