我在我的数据库中使用Microsoft Visual Studio C#2005和Oracle。我有一个带有SQL Statment的代码块。
以下是代码:
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();
当我尝试调试它时,我继续收到错误消息:
从找不到预期的关键字
但是当我在oracle上尝试它时,它运行没有任何错误。
感谢很多。 =)
答案 0 :(得分:1)
假设您要为结果20120501
,20120502
和20120503
的列命名,则使用单引号而不是双引号。将您的查询更改为
SELECT EQPID, " +
" DECODE(CUTOFF_DATE, '20120501', SUM(TKINQTY))\"20120501\", " +
" DECODE(CUTOFF_DATE, '20120502', SUM(TKINQTY))\"20120502\", +...
-- ^^ ^^
解决问题。请注意,由于查询字符串位于C#字符串中,因此需要使用反斜杠转义双引号。