C# 查询命令 SQL 带引号

标签 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 + " 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/

相关文章:

sql - 最佳实践 : should I use FK on DB using nHibernate/FluentNhibernate?

数据库设计工具问题

mysql - SQL 2 求和给出了错误的结果

mysql - 错误 1059 : Identifier Name Too Long on Foreign Key Constraints from Existing Table

c# - 从 SkyDrive 文件夹中获取文件列表 (Windows Phone)

c# - 是否可以同时在多个线程中运行 500 个不同的操作?

php - where in condition 代码点火器

c# - 如何制作使用同一程序集中的静态变量的动态方法?

c# - 在Gstreamer(C#)中使用管道播放音频

sql - 在 Azure SQL 数据库中存储 CREATE、TRUNCATE 和 DROP 语句的执行历史记录