我想用 C# 从 Oracle 数据库中获取数据。问题是名为“DATE”和“HOUR”的两列是 SQL/Oracle 表达式。
这是我的查询命令:
command.CommandText = @"SELECT BOXID, PUMP_BIT, DATE, HOUR, RUN_DURATION, POWER_ONS FROM PUMP_AGG_HOURLY WHERE BOXID = " + tb_BoxIDAktuell.Text + " AND PUMP_BIT = " + BitPumpe1 + " ORDER BY DATE, HOUR";
为了测试,我为 DATE 和 HOUR 列添加了引号,SQL 语句在 Oracle SQL Developer 中运行:
SELECT BOXID, PUMP_BIT, "DATE", "HOUR", RUN_DURATION, POWER_ONS FROM PUMP_AGG_HOURLY WHERE BOXID = '4' AND PUMP_BIT = '1' ORDER BY "DATE", "HOUR";
在 C# 中,我添加了双引号,但语句给出了错误
command.CommandText = @"SELECT BOXID, PUMP_BIT, ""DATE"", ""HOUR"", RUN_DURATION, POWER_ONS FROM TPT2000_PUMP_AGG_HOURLY WHERE BOXID = " + tb_BoxIDAktuell.Text + " AND PUMP_BIT = " + BitPumpe1 + " AND DATE BETWEEN to_date('" + Start + "','dd/mm/yyyy hh24:mi:ss') and to_date('" + Ende + "','dd/mm/yyyy hh24:mi:ss') ORDER BY ""DATE"", ""HOUR""";
ORA-00936 missing expression
我认为这是因为 ORDER BY DATE, HOUR
这是 SQL 表达式。我尝试了 ORDER BY PUMP_AGG_HOURLY.DATE, PUMP_AGG_HOURLY.HOUR
但得到了同样的错误。
我该如何解决这个问题?谢谢
最佳答案
这个语法对我有用:
using (connection)
{
OracleCommand command = new OracleCommand();
command.Connection = connection;
command.CommandType = CommandType.Text;
command.BindByName = true;
command.CommandText =
"SELECT BOXID, PUMP_BIT, \"DATE\", \"HOUR\", RUN_DURATION, POWER_ONS " +
" FROM PUMP_AGG_HOURLY " +
" WHERE BOXID = :BoxID AND PUMP_BIT = :BitPumpe " +
" AND \"DATE\" BETWEEN to_date(:Date1,'dd/mm/yyyy hh24:mi:ss') " +
" and to_date(:Date2,'dd/mm/yyyy hh24:mi:ss')" +
" ORDER BY \"DATE\", \"HOUR\"";
command.Parameters.Add("BoxID", '1');
command.Parameters.Add("BitPumpe", '4');
command.Parameters.Add("Date1", "30/01/2015 01:00:00");
command.Parameters.Add("Date2", "30/01/2015 18:00:00");
OracleDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine(reader.GetString(0) + ", " + reader.GetString(1));
Console.WriteLine(reader.GetDateTime(2));
}
}
Oracle 测试表定义和示例数据:
create table PUMP_AGG_HOURLY (boxid varchar2(2), pump_bit varchar2(2),
"DATE" date, "HOUR" varchar2(5), run_duration number(5), power_ons number(5));
insert into PUMP_AGG_HOURLY
values ('1', '4', to_date('2015-01-30 03:45', 'yyyy-mm-dd hh24:mi'), null, null, null);
关于C# 查询命令 SQL 带引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31203772/