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

时间:2017-03-11 16:50:00

标签: c# sql-server

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'。

1 个答案:

答案 0 :(得分:1)

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类型
  3. 不要将DateTime个实例存储为字符串,也不要将它们检索为字符串。