C# 如果为空,可以在bool和DateTime变量中分配什么?

C# 如果为空,可以在bool和DateTime变量中分配什么?,c#,sql-server,C#,Sql Server,上面的语句在从存储过程获取数据时给出了以下错误: 无法确定条件表达式的类型,因为它们之间没有隐式转换 'bool'和'System.DBNull' 无法确定条件表达式的类型,因为它们之间没有隐式转换 “DateTime”和“null” 从DateTime DataTable rdrFeedback; using (rdrFeedback = CommonHelper.GetDataTable(CommandType.StoredProcedure, "[Crew].[Up_CM_SEAFARER

上面的语句在从存储过程获取数据时给出了以下错误:

无法确定条件表达式的类型,因为它们之间没有隐式转换 'bool'和'System.DBNull'

无法确定条件表达式的类型,因为它们之间没有隐式转换 “DateTime”和“null”


DateTime

DataTable rdrFeedback;
using (rdrFeedback = CommonHelper.GetDataTable(CommandType.StoredProcedure, "[Crew].[Up_CM_SEAFARER_FEEDBACK]", sqlParams.ToArray()))
{
    foreach(DataRow dRow in rdrFeedback.Rows)
    {
            bool? AnswSix = dRow["ANSW_SIX"] != DBNull.Value ? (bool)dRow["ANSW_SIX"] : DBNull.Value; 
            DateTime? AcknowledgedOn = dRow["ACKNOWLEDGED_ON"] != DBNull.Value ? Convert.ToDateTime(dRow["ACKNOWLEDGED_ON"].ToString()) : null;
    }
}
对于
bool
也是如此,但是您必须指定
null
作为备用值,而不是
DBNull.value

DateTime? AcknowledgedOn = dRow["ACKNOWLEDGED_ON"] != DBNull.Value 
   ? (DateTime?) Convert.ToDateTime(dRow["ACKNOWLEDGED_ON"].ToString()) 
   : null;
还有,为什么要使用
Convert.ToDateTime
?如果数据库具有日期时间值,则应为:

  • 在数据库中存储为实际的
    日期
    日期时间
    类型
  • 作为
    DateTime
    类型检索
  • 不要将
    DateTime
    实例存储为字符串,也不要将其检索为字符串

    bool? AnswSix = dRow["ANSW_SIX"] != DBNull.Value 
      ? (bool?)dRow["ANSW_SIX"] 
      : null;