ora-01036非法变量名称/号码c#

时间:2017-12-07 06:11:37

标签: c# oracle

请帮助我

获取日期范围的数据时出现错误

DataTable dt = new DataTable();

       StringBuilder sb = new StringBuilder("SELECT (select dep_title from hr.departments dp where dp.dep_id = d.dep_id) as title,    (SELECT COUNT(*) FROM esd.DOCUMENTS T");
       sb.Append("WHERE T.DEP_ID = D.DEP_ID");
       sb.Append("and t.systarix between");
       sb.Append("to_date(':FROM_DATE', 'MM.DD.YYYY') And");
       sb.Append("to_date(':TO_DATE', 'MM.DD.YYYY')) AS SAY");
       sb.Append("FROM HR.DEPARTMENTS D");


       command.CommandText = sb.ToString();

       command.Parameters.Add("FROM_DATE", OracleType.VarChar);
       command.Parameters["FROM_DATE"].Value = DE_from.DateTime.Date;
       command.Parameters.Add("TO_DATE", OracleType.VarChar);
       command.Parameters["TO_DATE"].Value = DE_to.DateTime.Date;


       dt.Load(command.ExecuteReader());

       gridControl1.DataSource = dt;

错误

  

ora-01036非法变量名称/编号

1 个答案:

答案 0 :(得分:0)

以下是您的查询的内容,以及您如何关闭子选择中的开始(。我建议阅读一些基本的Sql选择。 Oracle在语法方面有很好的文档。

另请阅读有关如何正确构建/格式化Sub-Query

的信息

查看select我格式化的字段,以便您可以看到使用StringBuilder构建的原始查询。

SELECT 
(
    select dep_title from hr.departments dp where dp.dep_id = d.dep_id) as title,
    (
        SELECT COUNT(*) FROM esd.DOCUMENTS TWHERE T.DEP_ID = D.DEP_IDand t.systarix 
        betweento_date(':FROM_DATE', 'MM.DD.YYYY') Andto_date(':TO_DATE', 'MM.DD.YYYY')
    ) AS SAYFROM HR.DEPARTMENTS D

由于你没有添加的间距“

,你的错误就在了

TWHERE 这应该是T WHERE

D.DEP_ID和t.systarix 这应该是D.DEP_ID和t.systarix

betweento_date 这应该在to_date

之间

AS SAYFROM 这应该是AS SAY FROM

我建议/建议在Oracle Developer中创建Select Query并首先执行它们。从那里获得查询后,将查询转换为存储过程。