更新限制期间的语法错误或更新顶部(1)c#&访问

时间:2015-03-08 12:34:52

标签: ms-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。

任何想法?

2 个答案:

答案 0 :(得分:0)

好的,有几件事:

其一,您无法在Access数据库的ORDER BY语句中使用LIMITUPDATE。您链接的示例是MySQL,一个不同的数据库。

二:Jon Skeet所说的绝对正确:您需要使用参数化SQL而不是直接在SQL中放置值。

三:鉴于ORDER BYLIMIT在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个值。