C# 无法隐式转换类型';对象';至';System.DateTime';。存在显式转换(是否缺少强制转换?)

C# 无法隐式转换类型';对象';至';System.DateTime';。存在显式转换(是否缺少强制转换?),c#,sql,C#,Sql,我正在开发我的第一个程序,面临一些问题,请帮助我完成它 我用c#编写了这个代码: 这方面的错误消息是。。。。。。。。。。。。。。。出生日期=dr[“出生日期”] 错误2无法将类型“object”隐式转换为“System.DateTime”。存在显式转换 (你错过了演员阵容吗?) C:\Users\MICKY\Documents\visualstudio 2008\Projects\Godswill\Godswill\Personal.cs 249 28 Godswill您应该强制执行所有这些,而

我正在开发我的第一个程序,面临一些问题,请帮助我完成它 我用c#编写了这个代码:

这方面的错误消息是。。。。。。。。。。。。。。。出生日期=dr[“出生日期”]

错误2无法将类型“object”隐式转换为“System.DateTime”。存在显式转换

(你错过了演员阵容吗?)

C:\Users\MICKY\Documents\visualstudio 2008\Projects\Godswill\Godswill\Personal.cs 249 28 Godswill

您应该强制执行所有这些,而不是盲目地使用
ToString()

这将根据需要“取消装箱”该值

当然,这里更简单的方法是使用ORM或micro ORM(如“dapper”)——然后您只需运行:

var user = connection.Query<User>("select * from Users where Id=@id",
         new {id = 123}).First(); // (this is using "dapper")
还有,;确保您在此处使用阅读了有关
的内容,即

using(SqlDataReader dr = cmd.ExecuteReader())
{
    if (dr.Read()) {...etc...}
}
这对于连接等更为重要,但它可以确保资源正确地
Dispose()
d,即使出现错误。这将替换“init为null,最后设置为null”代码,并具有实际执行某些操作的优势;p

date_ofbirth = DateTime.Parse(dr["dateofbirth"].ToString());
或安全解析:

DateTime.TryParse(dr["dateofbirth"].ToString(), out date_ofbirth);

您必须在
dr[“dateofbirth”]
上以及
dr[“idexpirydate”]
上使用
Convert.ToDateTime
(因为年龄将是
int
转换为32岁,以防年龄也失败!)

返回的是
object
类型,您必须将其专门转换为定义的数据类型,并非所有类型都是字符串,因此
ToString()
不是所有类型的选择


另外,如果您在使用类似的内容时没有使用可为空的数据类型,那么最好检查
DBNull

myVar = dr["myColumnName"];
dr[“myColumnName”]
的值被编译器视为一个简单对象。在指定之前,应始终强制转换它:

myVar = (ExpectedType)dr["myColumnName"];

如果下面是
DateTime
,为什么要转换为字符串并返回呢?Parse或TryParse确实需要一个字符串(而不是object),但当下面已经是DateTime时,在将其返回解析之前将其序列化为字符串是没有意义的!一个演员阵容就足够了。我花了15分钟研究的小问题:如果你的班级不是公共的,而是私人的,dapper会抛出同样的错误。有点模糊。
DateTime.TryParse(dr["dateofbirth"].ToString(), out date_ofbirth);
myVar = dr["myColumnName"];
myVar = (ExpectedType)dr["myColumnName"];