You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将同一供应商的所有DataGridView数据插入SQL数据库同一行

实现同一供应商的DataGridView数据插入数据库同一行

嘿,我懂你的需求啦——原来的代码会把DataGridView里的每一行明细都单独插成数据库的一条记录,现在要把同一个供应商的所有明细打包进同一条数据库行里对吧?咱们来一步步调整:

首先得明确核心思路:把DataGridView里的多行明细字段(比如数量、药品名称)用分隔符拼接成单个字符串,然后一次性插入数据库的一行,同时要避开SQL注入的坑(你原来的字符串拼接写法风险很高哦)。

步骤1:收集并拼接明细数据

先遍历DataGridView,把需要合并的字段(比如quantity和medicine_name)分别收集起来,用合适的分隔符(比如分号;)拼接成完整的字符串。

步骤2:用参数化查询执行插入

绝对不要用字符串拼接SQL语句!改用参数化查询,既安全又能避免格式错误(比如字段里有引号的情况)。

修改后的完整代码示例

string connString = "你的数据库连接字符串"; // 替换成实际的连接字符串
try
{
    using (MySqlConnection conn = new MySqlConnection(connString))
    {
        conn.Open();
        
        // 1. 收集并拼接明细数据
        List<string> quantities = new List<string>();
        List<string> medicineNames = new List<string>();
        
        for (int i = 0; i < invoice_insertion_grid_view.Rows.Count - 1; i++)
        {
            quantities.Add(invoice_insertion_grid_view.Rows[i].Cells["quantity"].Value.ToString());
            medicineNames.Add(invoice_insertion_grid_view.Rows[i].Cells["medicine_name"].Value.ToString());
        }
        
        // 用分号分隔拼接成单个字符串,也可以换成其他你喜欢的分隔符
        string mergedQuantity = string.Join(";", quantities);
        string mergedMedicineNames = string.Join(";", medicineNames);
        
        // 2. 构造参数化的SQL语句
        string strQuery = @"INSERT INTO purchasing 
                            VALUES('', @InvoiceNo, @VendorName, @PurchaseDate, '', '', @TotalBalance, @MergedQuantity, @MergedMedicines, 'pending', @Payable)";
        
        using (MySqlCommand cmd = new MySqlCommand(strQuery, conn))
        {
            // 添加参数,避免SQL注入
            cmd.Parameters.AddWithValue("@InvoiceNo", bill_purchasing_invoice_textbox.Text);
            cmd.Parameters.AddWithValue("@VendorName", bill_purchasing_vendor_combobox.SelectedItem.ToString());
            cmd.Parameters.AddWithValue("@PurchaseDate", bill_purchasing_date_textbox.Value.Date);
            cmd.Parameters.AddWithValue("@TotalBalance", bill_purchasing_total_balance_textbox.Text);
            cmd.Parameters.AddWithValue("@MergedQuantity", mergedQuantity);
            cmd.Parameters.AddWithValue("@MergedMedicines", mergedMedicineNames);
            cmd.Parameters.AddWithValue("@Payable", purchasing_invoice_payable_box.Text);
            
            cmd.ExecuteNonQuery();
        }
        
        MessageBox.Show("数据已成功插入!");
    }
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
    MessageBox.Show("插入失败:" + ex.Message);
}

重要提醒

  • 请确保你的purchasing表中,存储合并后数量和药品名称的字段(对应代码里的MergedQuantity和MergedMedicines)有足够的长度,建议把字段类型改成TEXT或者加大VARCHAR的长度,避免拼接后的字符串被截断。
  • 如果之后需要拆分这些合并的数据,可以用字符串分割方法(比如Split(';'))还原成原来的明细行。

内容的提问来源于stack exchange,提问作者Asfand Tariq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:55:37