3

我正在使用 linq 从数据库中提取一些信息。

sql脚本:

    TYPE CURS IS REF CURSOR;

    CREATE OR REPLACE
    PROCEDURE PROCEDURE_NAME (
        Cursor1 OUT CURS)
    AS
    BEGIN
        OPEN Cursor1 FOR
            SELECT NO, TITLE, TO_CHAR(STARTDATE) STARTDATE
            FROM TABLE_1;
    END;

林克代码:

    var query = from e in getItem().AsEnumerable()
                select new {
                    No = e.Field<string>("NO"),
                    Title = e.Field<string>("TITLE"),
                    StartDate = e.Field<string>("STARTDATE")
                };

    return query.Select(e => new ClassA()
    {
        No = e.No,
        Title = e.Title,
        StartDate = e.StartDate
    }).ToList<ClassA>();

A类:

    public class ClassA {
        public string No { get; set; }
        public string Title { get; set; }
        public string StartDate { get; set; }
    }

获取项目():

    public DataTable getItem() {
        OracleDataAdapter da = new OracleDataAdapter();
        DataSet ds = new DataSet();
        OracleCommand cmd = new OracleCommand();

        cmd.CommandText = "PROCEDURE_NAME";
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("Cursor1", OracleDbType.RefCursor).Direction = ParameterDirection.Output;

        da.SelectCommand = cmd;
        da.Fill(ds);

        return ds.Tables[0];
    }

但是查询总是返回错误Unable to cast object of type 'System.DateTime' to type 'System.String'.,但我已经检查了 STARTDATE 是否被提取为 System.String。如何解决这个问题?这太痛苦了..


[更新]

它现在可以工作了,我将 STARTDATE 的所有数据类型更改为DateTime并从数据库中提取它而不进行转换。

但是,我仍然不明白为什么会出现错误。

4

2 回答 2

0

在存储过程中,删除函数 TO_CHAR。此函数将 datetime 列转换为 varchar2 列。

TYPE CURS IS REF CURSOR;

CREATE OR REPLACE
PROCEDURE PROCEDURE_NAME (
    Cursor1 OUT CURS)
AS
BEGIN
    OPEN Cursor1 FOR
        SELECT NO, TITLE, STARTDATE
        FROM TABLE_1;
END;
于 2013-05-29T08:57:05.793 回答
0

为了对这个问题有一个正式的答案,我将在这里发布所有者的答案。(如果所有者将他的答案包括在这里,我将删除它)。

[更新]

它现在可以工作了,我将 STARTDATE 的所有数据类型更改为 DateTime 并从数据库中提取它而不进行转换。

于 2014-09-05T02:01:39.120 回答