2013-07-09 36 views
0

我在我的网站上有一个listbox项目,selectionmode为“multilple”。我想在我的sql服务器中将所有选择的项目插入表格中的一列,当我点击提交按钮时。如何在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> 

这怎么可能?请帮忙。

+2

仅供参考,表格包含*列*,而不是*格*。单元格可在电子表格和监狱中找到。 –

+0

对不起。我纠正了它。 – Tannya

+0

其实我有很多其他的控件,如文本框,日历控件,文件上传等。我有一个提交按钮。点击,我想插入所有这些值到用户表。由于列表框项目的数量很多,所以我被其他项目卡住了。 – Tannya

回答

0

结合的所有值,并将它们植入一列是不是一个好主意。 ..如上所述,它甚至不符合数据标准化的1NF条件,结果是磁盘空间使用效率低下,查询速度慢(根据我的理解,从这样的表中得到结果真的很麻烦)。但是,如果你仍然想这样做,你可以尝试将值与一个分隔符(,或/)连接起来,然后插入它们,以便在稍后阶段可以将其拆分出来。

+0

非常感谢。 – Tannya

5

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

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

+1

+1,但我不认为OP在这一点上接近于能够设计数据库。 –

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

但是,要求没什么意义。为什么当用户选择它的一部分时,你想插入masterdata。听起来好像你实际上想插入到不同的表格中,该表格链接到语言表格。

例如:

表1:UserLanguagesUserID + LanguageID

表2:Languages与上述模型

+0

我想只将用户选择的值插入到表中。另外还有许多其他控件,如接受用户名,密码,DOB,文件上传和下载控件的文本框。我在页面上有一个提交按钮。当我点击那个,我想插入所有这些值到用户表。 – Tannya

相关问题