0

代码:

string query1 = @"UPDATE global_mapping set escape_id = " + 
  dataGridView1.Rows[i].Cells[2].Value + ",function_id = " + 
  dataGridView1.Rows[i].Cells[3].Value + ",function_name = '" + 
  dataGridView1.Rows[i].Cells[4].Value + "',parameter_name = '" + 
  dataGridView1.Rows[i].Cells[5].Value + "',parameter_validity = '" + 
  dataGridView1.Rows[i].Cells[6].Value + "',statusparameter_id = " + 
  dataGridView1.Rows[i].Cells[7].Value + ",acb_datatype = '" + 
  dataGridView1.Rows[i].Cells[8].Value + "',data_type_id = " + 
  dataGridView1.Rows[i].Cells[9].Value + ",bit_size = " + 
  dataGridView1.Rows[i].Cells[10].Value + ",validity_status ='" + 
  dataGridView1.Rows[i].Cells[11].Value + "',validity_func = '" + 
  dataGridView1.Rows[i].Cells[12].Value + "'WHERE global_mapping.parameter_id =" + 
  dataGridView1.Rows[i].Cells[1].Value + "";
OleDbCommand cmd1 = new OleDbCommand(query1, conn);
cmd1.ExecuteNonQuery();

代码结束:

当我执行上述代码时,我收到一条错误消息,指出“更新语句中的语法错误”。有人可以告诉我如何解决这个问题吗?

4

6 回答 6

2

看起来您需要在 WHERE 子句之前添加一个空格。

希望这可以帮助,

账单

于 2009-05-19T08:48:27.780 回答
1

哇。我们可以说... SQL 注入吗?

尝试使用参数。您不仅会保护自己,而且您的 SQL 将变得更具可读性。

于 2009-05-19T08:28:25.353 回答
1

永远不要使用字符串连接来构建 SQL 查询。使用 SQL 参数。

于 2009-05-19T08:28:30.220 回答
0

哎呀!请提供最终的 query1 值并尝试对其进行格式化,以便我们更好地了解它。我的猜测是缺少 ' 或其他东西。

于 2009-05-19T08:29:24.867 回答
0

我会说你在那里遗漏了一些引号,但你的代码是如此的猪圈,我无法分辨。如果你不修复你的代码,那么至少给我们一个 query1 的转储,这样我们就可以读取你的实际查询。

并像前面回复所说的那样使用参数或存储过程。所需要的只是你的一个变量被讨厌的东西覆盖,你的服务器将对任何删除你的表或更糟的人开放。

即使这是一个本地“安全”数据库,你现在也应该改掉你的坏习惯。

于 2009-05-19T08:36:49.237 回答
-1

放在 Console.WriteLine(query1) 前面OleDbCommand cmd1 = new OleDbCommand(query1, conn);

查看query1打印到控制台窗口的值。
SQL 语句看起来正常吗?我猜不是——您现在可以在网格中找到一个非数字且为空白的字段。

并且,像其他人所说的那样使用参数。

于 2009-05-19T08:49:16.013 回答