2015-07-21 117 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

相关问题