2016-04-22 39 views
0

任何人都可以解釋爲什麼這異常被拋出時,我對象添加到列表<>奇怪的行爲將結構與DateTime值的列表

Year, Month, and Day parameters describe an un-representable DateTime 

在結構上的日期時間是有效的,比賽什麼未來脫離數據庫。不知道爲什麼添加到列表時拋出異常。

的代碼非常簡單

 var returnData = new List<IntelliformMetaData>(); 
    foreach (DataRow row in ExecuteQuery(command).Rows) 
       { 
        //returnData.Add(new IntelliformMetaData() 
        // { 
        //  header = (byte[])row["header"], 
        //  OprINI = row["initial"].ToString(), 
        //  CreatedTime = (DateTime)row["dt"], 
        //  ID = (int)row["id"], 
        //  FileReason = "" 
        // }); 

        var temp = new IntelliformMetaData(); 
        temp.header = (byte[])row["header"]; 
        temp.CreatedTime = (DateTime)row["dt"]; <- OK 
        temp.OprINI = row["initial"].ToString(); 
        temp.ID = (int)row["id"]; 
        temp.FileReason = ""; 

        returnData.Add(temp); <- Exception 

       } 

結構

private struct IntelliformMetaData 
{ 
    public long ID; 
    public string OprINI; 
    public string FileReason; 
    public DateTime CreatedTime; 
    public byte[] header; 
} 
+2

的例外似乎矛盾的「有效」的結構。調試器告訴你什麼是'row [「dt」]'的值? – LarsTech

+0

確保日期按年,月,日的順序排列。 – Tushar

+0

數據庫中的列類型實際上是DateTime類型還是它是Varchar? – exceptionthrown

回答

0

而不是使用一個可變的結構(如你正在做的),使其一成不變,構建結構時指定的值。可變的結構可能有奇怪的問題,這似乎是你正在經歷的一個潛在原因。

所以,如果你改變你的結構代碼:

private struct IntelliformMetaData 
{ 
    public readonly long ID; 
    public readonly string OprINI; 
    public readonly string FileReason; 
    public readonly DateTime CreatedTime; 
    public readonly byte[] header; 

    public IntelliformMetaData(long pId, string pOprINI, string pFileReason, DateTime pCreatedTime, byte[] pHeader) 
    { 
     this.ID = pId; 
     this.OprINI = pOprINI; 
     this.FileReason = pFileReason; 
     this.CreatedTime = pCreatedTime; 
     this.header = pHeader; 
    } 
} 

再改,你就創造:

var temp = new IntelliformMetaData((int)row["id"] 
      , row["initial"].ToString() 
      , "" 
      , (DateTime)row["dt"] 
      , (byte[])row["header"]); 

returnData.Add(temp); 
+0

複製了你的代碼,仍然得到相同的錯誤;-(也試圖讓IntelliformMetaData成爲一個類,但仍然遇到同樣的問題 – MrChrisOsburn