我在此代码中有语法错误
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。
任何想法?
答案 0 :(得分:0)
好的,有几件事:
其一,您无法在Access数据库的ORDER BY
语句中使用LIMIT
或UPDATE
。您链接的示例是MySQL,一个不同的数据库。
二:Jon Skeet所说的绝对正确:您需要使用参数化SQL而不是直接在SQL中放置值。
三:鉴于ORDER BY
和LIMIT
在Access更新语句中无效,如果替换此代码:
+ JSS_Ready_For_Sale + "' ORDER BY prod_COMPANY LIMIT 1 )";
......用这个:
+ JSS_Ready_For_Sale + "')";
...语法错误,或者至少是语法错误,可能会消失。
您可能还希望在WHERE
和(
之间添加空格。我不知道这会被视为语法错误,但它可能会。
ETA:还有!如果您只想更新一条记录,即具有特定ID的记录(我从您的问题文本中推断出来),您需要在WHERE
子句中指定该记录ID。
如果您记录的是不具有唯一ID,那么您需要解决一个非常大的问题。如果您希望能够更新特定记录,则绝对需要唯一ID。
答案 1 :(得分:0)
您还需要一个正确格式的日期字符串表达式:
piv_SALED_DATE = #" + dateTimePicker1.Value.ToString("yyyy'/'MM'/'dd") + "# ,
在Access SQL中,您将使用"选择Top n .."选择前n个值。