0

データベースに Microsoft Visual Studio C# 2005 と Oracle を使用しています。SQL ステートメントを使用したコード ブロックがあります。

コードは次のとおりです。

 con = new OracleConnection(conStr);
            con.Open();
 query = " SELECT EQPID, " + 
                    " DECODE(CUTOFF_DATE, '20120501', SUM(TKINQTY))'20120501', " +
 " DECODE(CUTOFF_DATE, '20120502', SUM(TKINQTY))'20120502', " + 
                    " DECODE(CUTOFF_DATE, '20120503', SUM(TKINQTY))'20120503'  " +
                    " FROM DAILY_DATA " +
                    " WHERE CUTOFF_DATE BETWEEN '20120501' AND '20120503' " +
                    " AND EQPID LIKE 'MS-%' " +
                    " GROUP BY CUTOFF_DATE, EQPID " +
                    " ORDER BY CUTOFF_DATE, EQPID";
 da = new OracleDataAdapter();
 da.SelectCommand = new OracleCommand(query, con);
            dt = new DataTable();
            da.Fill(dt);
            table.DataSource = dt;
 con.Close();

それをデバッグしようとすると、次のエラーメッセージが表示され続けます。

From キーワードが予期された場所に見つかりませんでした

しかし、オラクルで試したところ、エラーなしで実行されました。

どうもありがとう。=)

4

1 に答える 1

1

20120501結果、20120502、およびの列に名前を付けたいと仮定すると20120503、二重引用符の代わりに単一引用符を使用しています。クエリを次のように変更します

SELECT EQPID, " + 
" DECODE(CUTOFF_DATE, '20120501', SUM(TKINQTY))\"20120501\", " +
" DECODE(CUTOFF_DATE, '20120502', SUM(TKINQTY))\"20120502\", +...
--                                             ^^        ^^

問題を解決します。クエリ文字列は C# 文字列内にあるため、二重引用符はバックスラッシュでエスケープする必要があることに注意してください。

于 2013-05-17T02:19:03.487 に答える