Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带引号的C查询命令SQL_C#_Sql_Database_Oracle - Fatal编程技术网

C# 带引号的C查询命令SQL

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

我想从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";
为了进行测试,我在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的顺序。