Linq“无法将'System.DateTime'类型的对象强制转换为'System.String'”错误

时间:2013-05-29 02:50:36

标签: c# linq oracle

我正在使用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;

Linq代码:

    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; }
    }

getItem()时:

    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。怎么解决这个?它杀了我..


[UPDATE]

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

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

要对此问题给出正式答案,我将在此处发布所有者的答案。 (如果所有者将在此处提供答案,我将删除此内容。)

[UPDATE]

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