1

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"
4

2 に答える 2

4

Oracle の場合、クエリ:invNumberではなく、パラメータを として指定する必要があると思います。@invNumber

AND     h.FOLIO1 = :invNumber"

パラメータを設定すると、次のようになります ( を削除するだけです@):

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

編集

名前によるパラメーターバインディングを有効にする必要がある場合もあります(デフォルトでは位置的だと思います):

CMD.BindByName = true;
于 2015-08-25T13:42:31.860 に答える
0

すべてのクエリを同じ行に入れてみてください。文字列の最初の行だけが実行されているようです。また、「\」文字で処理する必要があるエスケープ文字または特殊文字がないかどうかも確認してください。

于 2015-08-25T13:08:22.753 に答える