从关键字未找到预期的位置

时间:2013-05-17 02:12:57

标签: c# sql oracle

我在我的数据库中使用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上尝试它时,它运行没有任何错误。

感谢很多。 =)

1 个答案:

答案 0 :(得分:1)

假设您要为结果201205012012050220120503的列命名,则使用单引号而不是双引号。将您的查询更改为

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

解决问题。请注意,由于查询字符串位于C#字符串中,因此需要使用反斜杠转义双引号。