C# 带引号的C查询命令SQL
我想从c语言的Oracle数据库中获取数据。问题在于,两个名为DATE和HOUR的列是SQL/Oracle表达式 这是我的查询命令:C# 带引号的C查询命令SQL,c#,sql,database,oracle,C#,Sql,Database,Oracle,我想从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 + " OR
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";
为了进行测试,我在Oracle SQL Developer中为列DATE和HOUR以及SQL语句运行添加了引号:
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缺失表达
我认为这是因为按日期、小时排序的SQL表达式。我试着按PUMP_AGG_HOURLY.DATE和PUMP_AGG_HOURLY.Hourl订购,但得到了相同的错误
我怎样才能解决这个问题?谢谢这已经在中得到了回答
简短的回答是:Oracle似乎使用双引号,例如table,显然需要正确的大小写
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);
首先,这些不是连接字符串,而是sql命令。您是否尝试过将列名放在方括号中?[column]并在您有2次尝试使用此\\DATE\\\,\\HOUR\\@GuruprasadRao时删除,以避免出现错误ORA-01741:非法零长度identifier@WraithNath也给了我ORA-00936缺失的表达在上面的评论中它给了错误ORA-00936缺失的表达太棒了!谢谢还可以发现按ColumnID排序的命令也起作用:command.CommandText=@选择BOXID、泵位、日期、小时、运行持续时间、每小时从TPT2000泵位通电,其中BOXID=+tb\U BoxIDAktuell.Text+和泵位=+BitPumpe1+和\DATE\介于“日期”+Start+,“dd/mm/yyyyyyyh24:mi:ss”和“截止日期”+Ende+,“dd/mm/yyyyy hh24:mi:ss”由3、4发出的订单;ORDER BY 3,4可用,但不被视为最佳做法,因为它可读性不好,如果在选定列的第一位添加列,则很容易忘记应更改为ORDER BY 4,5的顺序。