gpt4 book ai didi

c# - 如何处理 Access INSERT 语句和 .NET DataGridView 控件中的语法错误?

转载 作者:行者123 更新时间:2023-12-03 08:24:11 24 4
gpt4 key购买 nike

我正在使用 Access (.accdb) 和一个用 C# 编写的 Windows 窗体应用程序。
当我尝试将数据插入数据库表时出现此错误。

System.Data.OleDb.OleDbException:INSERT INTO 语句中的 Sintax 错误。
适配器.InsertCommand.ExecuteNonQuery();


我试图通过直接路由和更新方法,但出现了同样的错误!

我的代码:

private void btnCronograma_Click(object sender, EventArgs e)
{
OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=mydatabase.accdb");
string sql;
int idProyecto, idMes, meta, real;

OleDbDataAdapter adaptador = new OleDbDataAdapter();

//for (int i = 0; i < this.dataGridView8.Rows.Count - 1; i++)
//{
foreach (DataGridViewRow row in dataGridView8.Rows)
{
DataGridViewComboBoxCell combo3 = row.Cells["idProyecto"] as DataGridViewComboBoxCell;
DataGridViewComboBoxCell combo4 = row.Cells["idMes"] as DataGridViewComboBoxCell;

MessageBox.Show(combo3.Value.ToString());
MessageBox.Show(combo4.Value.ToString());

idProyecto = int.Parse(combo3.Value.ToString());
idMes = int.Parse(combo4.Value.ToString());

meta = int.Parse(dataGridView8.Rows[0].Cells[3].Value.ToString());
real = int.Parse(dataGridView8.Rows[0].Cells[4].Value.ToString());
MessageBox.Show(meta.ToString());
MessageBox.Show(real.ToString());

//for (int i = 0; i < this.dataGridView8.Rows.Count - 1; i++)
//{
sql = "INSERT INTO IndicadorProyecto (idProyecto, idMes, meta, real) VALUES('" + idProyecto + "' , '" +
idMes + "' , '" + meta + "' , '" + real + "') ";

//sql = "INSERT INTO IndicadorProyecto (idMes, meta, real) VALUES('" + idMes + "' , '" + meta + "' , '" + real + "') ";

if (combo3 == null)
{
MessageBox.Show("No se pudo convertir");
}
else if (combo4 == null)
{
MessageBox.Show("No se pudo convertir");
}
else
{

}

try
{
conn.Open();
adaptador.InsertCommand = new OleDbCommand(sql, conn);
adaptador.InsertCommand.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
conn.Close();
}
//}
}
}

最佳答案

不应将字符串连接到 SQL 语句中。
这样做会破坏代码并创建 SQL 注入(inject)漏洞。

相反,您应该使用参数。

例如:

using (var conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=mydatabase.accdb"))
using (var command = new OleDbCommand(@"INSERT INTO IndicadorProyecto (idProyecto, idMes, meta, real) VALUES(?, ?, ?, ?") {
command.Parameters.AddWithValue("a", idProyecto);
command.Parameters.AddWithValue("b", idMes);
command.Parameters.AddWithValue("c", meta);
command.Parameters.AddWithValue("d", real);

conn.Open();
command.ExecuteNonQuery();
}

关于c# - 如何处理 Access INSERT 语句和 .NET DataGridView 控件中的语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4235924/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com