2015-07-21 118 views
0

我試圖測試從SQL Server 2012 Express實例中檢索某些信息並將其「添加」到列表中的方法。問題是,當我嘗試運行測試,我得到的錯誤:當從SQL Server 2012 Express檢索數據時出現「System.InvalidCastException」錯誤

"System.InvalidCastException"

下面是代碼:

List<Reference> lst = new List<Reference>(); 
//DB Connections is a class instance that takes care of the 
//connection with the db. 
DBConnections db = new DBConnections(DbConfig.conStr); 
db.UpdateCmd("SELECT * FROM freelancers_references"); 

SqlDataReader dr = db.ExecuteReader(); 

if (dr.HasRows) { 
    lst = dr.Cast<IDataRecord>().Select(r => 
     new Reference { 
      Id = (int)dr["id"], 
      OwnerId = (int)dr["owner_id"], 
      Name = (string)dr["name"], 
      Active = (bool)dr["active"] 
     }).ToList<Reference>(); 
} 

dr.Close(); 
return lst; 

編輯: @丹提供一個工作的答案。儘管使用Convert.ToInt/ToString()等方法也有效。

+0

可能的原因是在你的數據庫空。 –

+0

這似乎是這種情況。 – SpirosMesa

回答

0
DBConnections db = new DBConnections(DbConfig.conStr); 
db.UpdateCmd("SELECT * FROM freelancers_references"); 
SqlDataReader dr = db.ExecuteReader(); 
if (dr.HasRows) { 
    lst = dr.OfType<IDataRecord>().Select(r => 
     new Reference { 
      Id = (int)dr["id"], 
      OwnerId = (int)dr["owner_id"], 
      Name = (string)dr["name"], 
      Active = (bool)dr["active"] 
     }).ToList(); 
} 
dr.Close(); 
+0

那些數據行絕對不會是'Reference's。這將永遠返回一個空的列表 – Rob

+0

這表示感謝! – SpirosMesa

0

檢查列是否允許爲空。如果是這樣,則使可空類型I.e.

OwnerId = (int?)dr["owner_id"], 
+1

謝謝你的回答,但是當我嘗試執行它時,我收到一個錯誤。另一方面,我學習了可空類型,所以你的努力不是靜止的。再次感謝! :D – SpirosMesa

相關問題