解析查询时出错。 [令牌行号= 1,令牌行偏移= 13,令牌错误=订单]

时间:2014-12-25 11:31:18

标签: c# sql visual-studio-2010

表名为OrderOrderID是它的列名。每次运行它都会得到异常

" There was an error parsing the query. [ Token line number = 1,Token line offset = 13,
Token in error = Order ]" 

请帮帮我。谢谢。列名与代码给出的类似。

Int32 Product_ID = Convert.ToInt32(TxtProductId.Text);
Int64 Order_ID = Convert.ToInt32(TxtOrderNo.Text);
Int64 MoneyLeft = new int();
Int64 MoneyGiven = Convert.ToInt32(TxtAdvance.Text);
Int64 TotalMoney = Convert.ToInt32(LblTotalPrice.Text);
//Calculate Money left
MoneyLeft=TotalMoney-MoneyGiven;
string query = "INSERT INTO ORDER
(
    OrderId,
    OrderName,
    OrderItemNo,
    OrderQuantity,
    OrderMoneyLeft,
    OrderMoneyGiven,
    OrderTotalMoney
  )
VALUES
  (
    @val1,
    @val2,
    @val3,
    @val4,
    @val5,
    @val6,
    @val7
  )";

Command.Connection = SQLConnection;
Command.CommandText = query;
Command.Parameters.Clear();
Command.Parameters.AddWithValue("@val1", Order_ID);
Command.Parameters.AddWithValue("@val2", TxtCustomerName.Text);
Command.Parameters.AddWithValue("@val3", Product_ID);
Command.Parameters.AddWithValue("@val4", TxtItemQuantity.Text.ToString());
Command.Parameters.AddWithValue("@val5", MoneyLeft);
Command.Parameters.AddWithValue("@val6",MoneyGiven);
Command.Parameters.AddWithValue("@val7", TotalMoney);
Command.ExecuteNonQuery();

1 个答案:

答案 0 :(得分:0)

我看到的第一件事是,ORDER是T-SQL中的reserved keyword。您应该使用方括号(如[ORDER])。最佳解决方案是将表名更改为非保留字。

但是在这种情况下,我很惊讶您没有在<。em>类型的错误附近获得不正确的语法。

除此之外,我们需要知道您的列类型是什么以及您的参数值是什么。我强烈怀疑OrderQuantity列。根据它的名称,它听起来像一个数字类型的列。但是你传递了一个字符串作为参数。

并且不要使用AddWithValue方法。它可能会产生意外的结果。使用.Add() method及其超载。不要忘记使用using statement来处理您的SQLConnectionSqlCommand

阅读:Can we stop using AddWithValue() already?