gpt4 book ai didi

c# - Oracle 数据访问错误 : ORA-00936: missing expression

转载 作者:太空宇宙 更新时间:2023-11-03 21:18:50 24 4
gpt4 key购买 nike

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

ORA-00936: missing expression

我的 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 和网络上的其他帖子,查询是正确的并在 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"

最佳答案

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

AND     h.FOLIO1 = :invNumber"

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

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

编辑

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

CMD.BindByName = true;

关于c# - Oracle 数据访问错误 : ORA-00936: missing expression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32204727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com