【问题标题】:column AS alias throws 'System.IndexOutOfRangeException'列 AS 别名抛出“System.IndexOutOfRangeException”
【发布时间】:2016-07-06 18:32:22
【问题描述】:

在我的 WPF 应用程序中,使用 Oracle 数据库和 C#,我有这段代码来填充数据网格,但它抛出“System.IndexOutOfRangeException”,并且“找不到表 0”。

如果我从 SQL 中删除 AS Date,则不会引发异常,但数据网格在应用程序中将列名称显示为 to_char(date_, 'dd/mm/yyyy')

        db.SetSql("select sn, activity, attendees, to_char(date_, 'dd/mm/yyyy') AS Date from cpr");

        DataSet result = db.RetrieveRecords();

        datagrid1.ItemsSource = new DataView(result.Tables[0]);

【问题讨论】:

  • 尝试用双引号将“日期”括在“作为日期”中
  • @VasylMoskalov 仍然抛出相同的异常,并且只用单引号括起来,因为它已经在字符串中
  • RetrieveRecords的实现是什么?
  • 我认为您的查询不正确...您是否尝试直接在 SQL 中运行查询以查看它是否有效...查询错误...它以异常结束... RetrieveRecord 方法吞下异常并返回空数据集....您正在尝试访问导致异常的空数据集中的项目
  • @Viru,查询 select sn, activity, attendees, to_char(date_, 'dd/mm/yyyy) from cpr 在 sqlplus 中有效,但不适用于 AS Date

标签: c# wpf oracle exception datagrid


【解决方案1】:

您需要更正您的查询。 date 是 oracle 中的数据类型,这就是别名不起作用的原因。

要么用双引号将其括起来,要么自行更改列名。

在 SQL plus 中试试这个查询。它应该可以工作

select sn, activity, attendees, to_char(date_, 'dd/mm/yyyy') AS "Date" from cpr

然后在 C# 中试试这个

db.SetSql("select sn, activity, attendees, to_char(date_, 'dd/mm/yyyy') AS \"Date\" from cpr");

【讨论】:

    【解决方案2】:

    可能是因为DateOracle 中的key word。尝试通过转义关键字来更改您的查询,如下所示

        db.SetSql("select sn, activity, attendees, to_char(date_, 'dd/mm/yyyy') AS \"Date\" from cpr");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 2013-11-29
      相关资源
      最近更新 更多