update limt 或 update top(1) c# & access 期间的语法错误
syntax error during update limt or update top(1) c# & access
我在这段代码中有语法错误
string JSS_connetionString011 = null;
OleDbConnection JSS_connection011;
OleDbDataAdapter JSS_oledbAdapter011 = new OleDbDataAdapter();
string JSS_sql011 = null;
JSS_connetionString011 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|/je_salestoredb.mdb;Persist Security Info=True;Jet OLEDB:Database Password=JEPTUSJSSJes";
JSS_connection011 = new OleDbConnection(JSS_connetionString011);
JSS_sql011 = "update product set Siv_Sales_Invoice_NO = '" + textBox1.Text + "' , prod_Status = '" + JSS_product_Status + "' , prod_SALED_ftrCalc = '" + textBox10.Text + "' , piv_SALED_DATE = '" + dateTimePicker1.Text + "' , sivd_ID = '" + textBox3.Text + "' , prod_ROOM ='" + JSS_product_Warhousee + "' where( prod_COMPANY = '" + comboBox4.Text + "' and prod_MODEL = '" + comboBox5.Text + "' and prod_Status = '" + JSS_Ready_For_Sale + "' ORDER BY prod_COMPANY LIMIT 1 )";
JSS_connection011.Open();
JSS_oledbAdapter011.UpdateCommand = JSS_connection011.CreateCommand();
JSS_oledbAdapter011.UpdateCommand.CommandText = JSS_sql011;
JSS_oledbAdapter011.UpdateCommand.ExecuteNonQuery();
Syntax error (missing operator) in query expression '( prod_COMPANY = 'NSN' and prod_MODEL = '606' and prod_Status = 'true' ORDER BY prod_COMPANY LIMIT 1 )'.
查询语句条件相同的记录有很多条,但每条记录的id都不一样
有什么想法吗?
好的,有几件事:
第一,不能在 Access 数据库的 UPDATE
语句中使用 ORDER BY
或 LIMIT
。您链接到的示例适用于 MySQL,一个不同的数据库。
二:Jon Skeet 所说的绝对正确:您需要使用参数化 SQL 而不是直接将值放入 SQL.
三:鉴于ORDER BY
和LIMIT
在Access更新语句中无效,如果替换这段代码:
+ JSS_Ready_For_Sale + "' ORDER BY prod_COMPANY LIMIT 1 )";
...有了这个:
+ JSS_Ready_For_Sale + "')";
...语法错误,或者至少那个语法错误,可能会消失。
您可能还想在 WHERE
和 (
之间放置一个 space。我不知道那会算作语法错误,但有可能。
预计到达时间:还有!如果您只想更新一条记录,即具有特定 ID 的记录(我从您的问题文本中推断),您需要在 WHERE
子句中指定该记录 ID。
如果您的记录没有唯一 ID,则您有一个非常大的问题需要解决。如果您希望能够更新特定记录,则绝对需要唯一 ID。
您还需要一个格式正确的日期字符串表达式:
piv_SALED_DATE = #" + dateTimePicker1.Value.ToString("yyyy'/'MM'/'dd") + "# ,
并且在 Access SQL 中,您将使用 "Select Top n .." 到 select 前 n 个值。
我在这段代码中有语法错误
string JSS_connetionString011 = null;
OleDbConnection JSS_connection011;
OleDbDataAdapter JSS_oledbAdapter011 = new OleDbDataAdapter();
string JSS_sql011 = null;
JSS_connetionString011 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|/je_salestoredb.mdb;Persist Security Info=True;Jet OLEDB:Database Password=JEPTUSJSSJes";
JSS_connection011 = new OleDbConnection(JSS_connetionString011);
JSS_sql011 = "update product set Siv_Sales_Invoice_NO = '" + textBox1.Text + "' , prod_Status = '" + JSS_product_Status + "' , prod_SALED_ftrCalc = '" + textBox10.Text + "' , piv_SALED_DATE = '" + dateTimePicker1.Text + "' , sivd_ID = '" + textBox3.Text + "' , prod_ROOM ='" + JSS_product_Warhousee + "' where( prod_COMPANY = '" + comboBox4.Text + "' and prod_MODEL = '" + comboBox5.Text + "' and prod_Status = '" + JSS_Ready_For_Sale + "' ORDER BY prod_COMPANY LIMIT 1 )";
JSS_connection011.Open();
JSS_oledbAdapter011.UpdateCommand = JSS_connection011.CreateCommand();
JSS_oledbAdapter011.UpdateCommand.CommandText = JSS_sql011;
JSS_oledbAdapter011.UpdateCommand.ExecuteNonQuery();
Syntax error (missing operator) in query expression '( prod_COMPANY = 'NSN' and prod_MODEL = '606' and prod_Status = 'true' ORDER BY prod_COMPANY LIMIT 1 )'.
查询语句条件相同的记录有很多条,但每条记录的id都不一样
有什么想法吗?
好的,有几件事:
第一,不能在 Access 数据库的 UPDATE
语句中使用 ORDER BY
或 LIMIT
。您链接到的示例适用于 MySQL,一个不同的数据库。
二:Jon Skeet 所说的绝对正确:您需要使用参数化 SQL 而不是直接将值放入 SQL.
三:鉴于ORDER BY
和LIMIT
在Access更新语句中无效,如果替换这段代码:
+ JSS_Ready_For_Sale + "' ORDER BY prod_COMPANY LIMIT 1 )";
...有了这个:
+ JSS_Ready_For_Sale + "')";
...语法错误,或者至少那个语法错误,可能会消失。
您可能还想在 WHERE
和 (
之间放置一个 space。我不知道那会算作语法错误,但有可能。
预计到达时间:还有!如果您只想更新一条记录,即具有特定 ID 的记录(我从您的问题文本中推断),您需要在 WHERE
子句中指定该记录 ID。
如果您的记录没有唯一 ID,则您有一个非常大的问题需要解决。如果您希望能够更新特定记录,则绝对需要唯一 ID。
您还需要一个格式正确的日期字符串表达式:
piv_SALED_DATE = #" + dateTimePicker1.Value.ToString("yyyy'/'MM'/'dd") + "# ,
并且在 Access SQL 中,您将使用 "Select Top n .." 到 select 前 n 个值。