Oracle数据访问错误:ORA-00936:缺少表达式

时间:2015-08-25 13:00:42

标签: c# asp.net ora-00936

我正在访问我的asp.net应用程序中的Oracle数据库,并收到此错误:

  

ORA-00936:缺少表达

我的c#代码是:

getInfoByPoNum = 
"SELECT h.SYS_HEADER_ID, 
    h.FOLIO1 AS INV_NUMBER, 
    v.VENDOR_NAME,
    CASE WHEN h.Comments LIKE '%CLOSED%' THEN 'CLOSED' ELSE NVL(h.Comments, 'OPEN') END AS CComments,
    h.ORG_ID
FROM    INV_HEADERS h, VENDORS v
WHERE   h.LOOKUP_CODE in ('STANDARD', 'BLANKET')
AND     h.VENDOR_ID = v.VENDOR_ID
AND     h.FOLIO1 = @invNumber"

OracleCommand CMD = new OracleCommand();
OracleConnection CONN = new OracleConnection(constring.ConnectionString);

CMD.Connection = CONN;
CONN.Open();

CMD.Parameters.Clear();
CMD.Parameters.Add(new OracleParameter("@invNumber", INVNumber));
CMD.CommandText = getInfoByPoNum;

using (var reader = CMD.ExecuteReader())
{
    while (reader.Read())
    {  

错误发生在CMD.ExecuteReader() 基于SO和Web上的其他帖子,查询是正确的,并在oracle sql-developer中运行 是什么导致语法错误?

更新:如果我修改oracle查询并输入有效的发票号值而不是@invNumber,则查询在我的应用程序中正常运行。

getInfoByPoNum = 
    "SELECT h.SYS_HEADER_ID, 
        h.FOLIO1 AS INV_NUMBER, 
        v.VENDOR_NAME,
        CASE WHEN h.Comments LIKE '%CLOSED%' THEN 'CLOSED' ELSE NVL(h.Comments, 'OPEN') END AS CComments,
        h.ORG_ID
    FROM    INV_HEADERS h, VENDORS v
    WHERE   h.LOOKUP_CODE in ('STANDARD', 'BLANKET')
    AND     h.VENDOR_ID = v.VENDOR_ID
    AND     h.FOLIO1 = 2241QSA"

2 个答案:

答案 0 :(得分:4)

我认为对于Oracle,您的参数应该在查询中指定为:invNumber,而不是@invNumber

AND     h.FOLIO1 = :invNumber"

设置参数时,它应如下所示(只需删除@):

CMD.Parameters.Add(new OracleParameter("invNumber", INVNumber));

修改

您可能还需要按名称启用参数绑定(我认为默认情况下它是位置):

CMD.BindByName = true;

答案 1 :(得分:0)

尝试将所有查询放在同一行中,似乎只执行字符串的第一行。还要检查是否有任何转义字符或特殊字符必须用“\”字符处理。