我将使用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];
}
但是查询总是返回错误:
无法将类型为'System.DateTime'的对象强制转换为类型'System.String'
,但我已经检查过STARTDATE被提取为System.String。如何解决这个问题?这让我很困扰。
[更新] 现在它可以工作了,我将所有的STARTDATE数据类型都改为
DateTime
,并且在不进行转换的情况下从数据库中提取它。但是,我仍然不明白为什么会出现错误。
TO_CHAR
是 Oracle 的一个方法,返回一个VARCHAR2
:http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions180.htm - Ben ReichGetItem()
函数内部有一些转换将其转回为DATETIME类型?不确定为什么会这样,但我没有在您发布的代码中看到其他问题。 - Tim