c# - 从 C# 中的 datagridview 更新 sql 数据库
问题描述
我是新来的,但我需要一些帮助。我需要使用 Windows 窗体从 C# 更新 SQL Server 数据库,但我遇到了问题。我查了一下,但仍然找不到正确的答案。我需要通过按下按钮从 datagridview 更改或填充数据库来进行插入和更新。我为使用这段代码的两者创建了一个单独的函数;
private void InsertPositionen()
{
string qry = "";
SqlCommand insert = new SqlCommand(qry, con);
try
{
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
qry = "INSERT INTO BelegePositionen (BelID, BelPosId, Artikelnummer, Menge, Preis) VALUES( " + dataGridView1.Rows[i].Cells["BelID"] + ", "
+ dataGridView1.Rows[i].Cells["BelPosId"] + ", "
+ dataGridView1.Rows[i].Cells["Artikelnummer"] + ", "
+ dataGridView1.Rows[i].Cells["Menge"] + ", "
+ dataGridView1.Rows[i].Cells["Preis"];
}
insert.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void UpdatePositionen()
{
string updt = "";
SqlCommand update = new SqlCommand(updt, con);
try
{
for (int i = 0; i < dataGridView1.Rows.Count -1; i++)
{
updt = "UPDATE BelegePositionen SET BelID = "
+ dataGridView1.Rows[i].Cells["BelID"] +
", BelPosID = "
+ dataGridView1.Rows[i].Cells["BelPosID"] +
", Atrikelnummer = "
+ dataGridView1.Rows[i].Cells["Artikelnummer"] +
", Menge = "
+ dataGridView1.Rows[i].Cells["Menge"] +
", Preis = "
+ dataGridView1.Rows[i].Cells["Preis"];
}
update.ExecuteNonQuery();
con.Close();
MessageBox.Show("Done!");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
解决方案
你真的 不应该像这样做你的 SQL 东西!这会使您的代码对 SQL 注入漏洞敞开大门!停止那个 - 现在!
相反 - 使用参数化查询- 像这样:
private void InsertPositionen()
{
string qry = "INSERT INTO BelegePositionen (BelID, BelPosId, Artikelnummer, Menge, Preis) " +
"VALUES(@BelId, @BelPosId, @ArtNr, @Menge, @Preis);";
SqlCommand insert = new SqlCommand(qry, con);
// define the parameters
insert.Parameters.Add("@BelId", SqlDbType.Int);
insert.Parameters.Add("@BelPosId", SqlDbType.Int);
insert.Parameters.Add("@ArtNr", SqlDbType.Int); // maybe this is a string?
insert.Parameters.Add("@Menge", SqlDbType.Int);
insert.Parameters.Add("@Preis", SqlDbType.Decimal, 20, 4);
try
{
// in the loop, only *set* the parameter's values
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
insert.Parameters["@BelId"].Value = 1;
insert.Parameters["@BelPosId"].Value = 2;
insert.Parameters["@ArtNr"].Value = 3;
insert.Parameters["@Menge"].Value = 4;
insert.Parameters["@Preis"].Value = 99.95;
insert.ExecuteNonQuery();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
推荐阅读
- angularjs - 当数据需要时间加载时 Select2 不起作用
- c# - c# - Newtonsoft.Json 异常:序列化 IEnumerable 对象时出现问题
- java - 从本机应用程序在 Android 上绑定 QtService
- angular - Firebase 身份验证覆盖和/或提取缓存值
- python - Matlab VectorA/VectorB转Python
- gitlab-ci - Kaniko:在管道中构建多个 dockerfile
- python - 视图 pages.views.contact 没有返回 HttpResponse 对象。它返回 None 而不是
- python - 弹性搜索使用python使用时间戳排序
- android - 每 10k 会话的崩溃 Firebase 指标:我可以看到超过“过去 30 分钟”的信息吗?
- r - 如何生成带有分类子集的计数表?