c# - 如何将同一供应商的所有datagridview数据插入sql数据库的一行
问题描述
此代码将 datagridview 的所有行作为不同的行插入到具有相同供应商名称的数据库中。这是我的代码。gridview 数据插入不同行的数据库表。
43 7869 Bouzia Pharamectuial(pvt) Ld 0000-00-00 00:00:00 0 0 1741 45 abc 待定 36005
44 7869 Bouzia Pharamectuial(pvt) Ld 0000-00-00 00:00:00 0 0 1741 35 作为制药公司待定 36005
string StrQuery;
connString = "[enter image description here][1]";
try
{
conn = new MySqlConnection();
conn.ConnectionString = connString;
conn.Open();
using (MySqlCommand cmd = new MySqlCommand())
{
cmd.Connection = conn;
for (int i = 0; i < invoice_insertion_grid_view.Rows.Count -1; i++)
{
StrQuery = @"INSERT INTO purchasing Values('','" + bill_purchasing_invoice_textbox.Text + "','" + bill_purchasing_vendor_combobox.SelectedItem.ToString() + "','" + bill_purchasing_date_textbox.Value.Date + "','','','" + bill_purchasing_total_balance_textbox.Text + "','" + invoice_insertion_grid_view.Rows[i].Cells["quantity"].Value + "','" + invoice_insertion_grid_view.Rows[i].Cells["medicine_name"].Value + "','pending','" + purchasing_invoice_payable_box.Text + "')";
cmd.CommandText = StrQuery;
cmd.ExecuteNonQuery();
}
MessageBox.Show("Data is inserted successfully");
cmd.Dispose();
conn.Close();
}
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
MessageBox.Show(ex.Message);
}
解决方案
该代码当前读取表的每一行并执行关联的INSERT
查询。这是对N大小表的N个查询。如果要将所有数据合并到单个 DB 行中,则需要创建并执行单个语句,大概将所有行连接到单个字符串中。就像是: INSERT
var strData = "";
for (int i = 0; i < invoice_insertion_grid_view.Rows.Count -1; i++) {
strData += // <this row's data>;
}
StrQuery = @"INSERT INTO purchasing Values(" + strData + ")";
cmd.CommandText = StrQuery;
cmd.ExecuteNonQuery();
但是,我严重质疑这是否是您想要做的。在我的职业生涯中,曾经有一次将多行放入一个字符串中是正确的答案。 每 隔一段时间,就会有人不了解 SQL 的强大功能和实用性以及关系数据库的工作原理。
同时,在这里,我将指出一些其他细节:
充分利用 C# 的using语句。您不需要手动处置 db 命令或关闭 db 连接。
了解并使用准备好的语句。 几乎每次,当使用字符串插值来构建 SQL 语句(例如,
@"INSERT INTO ..." + someDataValue + " ..."
)时,您都做错了。
推荐阅读
- azure - 用于 OneDrive for business 代码流的重定向 url 是什么?
- firebase - Google Analytics 事件参数仅显示在过去 30 分钟内的事件中
- .net-core - 通过自定义 NuGet 包向 appsettings.json 添加日志记录条目
- javascript - 创建基于 API 的星级评分系统
- spring-boot - 如何使用连接表加载相互关系@OneToMany的2个实体的完整图表
- azure-functions - azure 函数应用程序配置中的 APPINSIGHTS_INSTRUMENTATIONKEY
- charts - 仅部分标签的 chart.js 行
- azure - 如何在 Azure 中删除服务器时发出警报?
- r - 如何在 R 中确定日期间隔是否与数据框中同一个人的另一个日期间隔重叠?
- c# - 尝试在 websocket 消息事件中时无法实例化预制件