【问题标题】:How to use Stringbuilder to insert multiple Listview Item into sqldatabase?如何使用Stringbuilder将多个Listview Item插入sqldatabase?
【发布时间】:2020-08-31 12:18:08
【问题描述】:

当我尝试一次将多个 listview 项插入 SQL 数据库时遇到问题。我想使用StringBuilder 来实现这一点。例如,我想附加下面的项目代码和项目名称,并只保存在数据库中的一行中,即 001 = 面包,002 = 肉馅饼等...

商品代码 - 001、002、003、004、005

商品名称 - 面包、肉饼、鱼卷、蛋卷、甜甜圈

这样,在我单击“保存”按钮后,所有“项目名称”字符串数据将存储在数据库中的一行中。下面是我的代码

foreach (ListViewItem i in listView1.Items)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("INSERT INTO Snack (Item code, Itemname)");
    sb.Append(" VALUES (@d1, @d2)");
    SqlCommand cmd = new SqlCommand(sb.ToString(), con);
        
    {
        cmd.Parameters.AddWithValue("@d1", i.SubItems[0].Text);
        cmd.Parameters.AddWithValue("@d2", i.SubItems[1].Text);           

        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
    }
 }
            

【问题讨论】:

  • 那么...您遇到了什么问题?我不明白具体需要解决什么问题。
  • 你是说你想用逗号加入所有的项目吗?你是指所有的子项目还是别的什么?
  • 您是否要将逗号分隔的值列表存储到列中?这是一个非常糟糕的数据库设计决策,只会给您带来永远的问题。
  • 对于您显示的代码,您不需要 StringBuilder。
  • 我无法理解您的列表视图的外观,而且我不明白“001 = Bread”之类的意思。是要将所有 listView1.Items 保存在一条记录中,还是要按 SubItem[0] 分组,然后将具有相同项目代码的所有 SubItem[1] 写入一条记录?

标签: c# sql sql-server ado.net


【解决方案1】:

您必须在循环中创建一个 StringBuilder,然后执行查询。它应该看起来像:

StringBuilder sb = new StringBuilder();
sb.Append("INSERT INTO Snack (Item code, Itemname) VALUES");
foreach (ListViewItem i in listView1.Items)
{
     sb.Append($" ({ i.SubItems[0].Text},{i.SubItems[1].Text}),");
}
sb.Remove(sb.Length - 1, 1);
sb.Append(";");
SqlCommand cmd = new SqlCommand(sb.ToString(), con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    • 2010-10-31
    相关资源
    最近更新 更多