2012-03-07 36 views
2

由於問題的標題國強類型的查詢參數的時候,我得到Specified cast is not valid例外,即使我的存儲過程返回intDateTime和我的類定義它一樣。小巧玲瓏的投擲無效轉換異常與使用Sybase ASE的

public class Foo 
{ 
    public int Id {get; set;} 
    public DateTime CreatedDate {get; set;} 
} 

當我執行此查詢:

變種結果= connection.Query( 「spGetFoo」,命令類型:CommandType.StoredProcedure);

我得到以下兩種例外:

InvalidCastException: Specified cast is not valid. 
DataException: Error parsing column 1 (Id=1 - Decimal) 

InvalidCastException: Specified cast is not valid. 
DataException: Error parsing column 2 (CreatedDate=Mar 7 2012 5:52:08:276PM - String) 

如果我修改的Foo性質從intdecimalDateTimestring得當填充值。但是,這引入了一個額外的步驟,即定義另一個包含正確變量類型的類,然後將Foo映射到新類。

我也嘗試通過Dapper源代碼中的GetTypeDeserializer來查看發生了什麼,但我對IL排放不是很熟悉。

+2

你肯定spGetFoo收益爲int和日期時間?你能顯示SQL和可能的列定義嗎? – 2012-03-13 13:54:38

+0

當然很高興看到Stored Proc .... – 2012-03-16 14:08:44

回答

1

也許問題是在存儲過程,但在此期間,您可以使用

public class Foo 
{ 
    private decimal _dbId; 
    public decimal DbId 
    { 
     get { return _dbId; } 
     set 
     { 
      _dbId = value; 
      _id =(int)value; 
     } 
    } 
    private String _dbCreadtedDate; 
    public String DbCreadtedDate 
    { 
     get { return _dbCreadtedDate; } 
     set 
     { 
      _dbCreadtedDate = value; 
      _createdDate = DateTime.Parse(_dbCreadtedDate); 
     } 
    } 
    private int _id; 
    public int Id 
    { 
     get { return _id; } 
     set { _id = value; _dbId = value; } 
    } 
    private DateTime _createdDate; 
    public DateTime CreatedDate 
    { 
     get { return _createdDate; } 
     set { _createdDate = value; _dbCreadtedDate = value.ToString(); } 
    } 
}