2013-05-29 68 views
3

我正在使用linq從數據庫中提取一些信息。Linq「無法投入'System.DateTime'類型的對象來鍵入'System.String'」錯誤

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。如何解決這個問題?其殺死我..


[更新]

它現在,我改變STARTDATE的所有數據類型DateTime和數據庫,無需轉換解壓。

但是,我不明白爲什麼會出現錯誤。

+0

如果你做了'StartDate = e.Field (「STARTDATE」)'會怎麼樣?那樣有用嗎? –

+0

同樣的錯誤仍然提示出 – noobie

+0

您是否在LINQ語句中使用了SQL查詢的結果,或者您是否嘗試構建一條LINQ語句來執行與SQL查詢相同的操作? – Tim

回答

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

要得到這個問題的正式答案,我會在這裏發佈所有者的答案。 (如果業主在這裏包括他的答案,我會刪除這個)。

[更新]

它現在,我改變STARTDATE的所有數據類型爲DateTime,可以從數據庫無需轉換解壓。

相關問題