如果NULL,则可以在Bool和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'和'system.dbnull'。

无法确定条件表达的类型,因为之间没有隐式转换 'datetime'和'null'。

DateTime

DateTime?添加铸件
DateTime? AcknowledgedOn = dRow["ACKNOWLEDGED_ON"] != DBNull.Value 
   ? (DateTime?) Convert.ToDateTime(dRow["ACKNOWLEDGED_ON"].ToString()) 
   : null;

bool也是如此,但您必须将null指定为替代值而不是DBNull.Value

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

另外,为什么要使用Convert.ToDateTime?如果您的数据库具有日期时间值,则应该是:

  1. 存储在数据库中的实际DateDateTime键入
  2. DateTime类型检索

请勿将DateTime实例存储为字符串,也不要将它们作为字符串检索。

最新更新