我有一个名为listbox
的ListBox。其“多选”属性设置为true
。我需要将此ListBox中的选择存储到数据库字段中。
请注意,我使用的是Web表单,ASP.NET,C#和Visual Studio Web Developer 2010 Express。
我的代码如下:
SqlCommand insertNL = new SqlCommand("insert into dbo.newsletter (newsletter_subject,newsletter_body,newsletter_sentto) VALUES ('" + TextBox1.Text + "', '" + TextBox2.Text + "', '" + ListBox1.SelectedItem + "')", badersql);
badersql.Open();
insertNL.ExecuteNonQuery();
badersql.Close();
不幸的是,此代码仅将ListBox的第一个选定值存储在newsletter_sentto
表的“newsletter
”列中。有没有人有任何关于如何修复此代码的建议?提前谢谢。
答案 0 :(得分:3)
要解决的问题:
答案 1 :(得分:2)
您需要先决定如何存储多个“newsletter_sentto”值。
您最好的解决方案是创建一个新的子表,其中每个所选项目有1行和一列,外键返回到您的简报表。
您可以尝试将它们一起存储在一行中,其中包含多个列(sentto1,sentto2等),这将限制您可以存储的最大值数,并且会导致在多个字段中搜索时出现问题。您如何查询发送给特定人的内容? WHERE sentto1=@user or sentto2=@user...
没有索引可以在那里使用。
您可以使用“,”或“;”将所有值填入单行和列中分开价值观。这会导致很多问题,因为每次你需要获得一个sentto值时,你必须不断拆分字符串。
答案 2 :(得分:2)
首先,您应该使用参数化查询而不是直接连接来防止SQL注入。其次,您需要遍历所选项目并构建(可能)选择的分隔列表。
var selectedItems = new List<string>();
foreach( var item in ListBox1.SelectedItems )
selectedItems.Add( item.ToString() );
var sql = "Insert dbo.newsletter(newsletter_subject,newsletter_body,newsletter_sentto)"
+ " Values(@newsletter_subject, @newsletter_body, @newsletter_sentto)"
badersql.Open();
using ( qlCommand = new SqlCommand(sql, badersql) )
{
qlCommand.Parameters.AddWithValue("@newsletter_subject", TextBox1.Text);
qlCommand.Parameters.AddWithValue("@newsletter_body", TextBox2.Text);
qlCommand.Parameters.AddWithValue("@newsletter_sentto", string.Join(',', selectedItems.ToArray()));
qlCommand.ExecuteNonQuery();
};
答案 3 :(得分:1)
尝试获取这样的选定项目:
string newsletterSentTo = "";
foreach (ListItem item in ListBox1.Items)
{
if (item.Selected)
newsletterSentTo += "," + item.Text;
}