如何使用Stringbuilder将多个Listview Item插入sqldatabase?

Posted

技术标签:

【中文标题】如何使用Stringbuilder将多个Listview Item插入sqldatabase?【英文标题】:How to use Stringbuilder to insert multiple Listview Item into 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] 写入一条记录? 【参考方案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();

【讨论】:

以上是关于如何使用Stringbuilder将多个Listview Item插入sqldatabase?的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 StringBuilder? StringBuffer 可以与多个线程以及一个线程一起使用吗?

如何将 Stringbuilder 变量变为 long?

Java基础 - String/StringBuilder/Buffer StringFor

StringBuffer与StringBuilder有什么区别

可变的StringBuffer类和StringBuilder类

StringBuffer和StringBuilder的区别