【问题标题】:How to handle [NULL] values of datetime from SQL Server to a datetimepicker如何处理从 SQL Server 到 datetimepicker 的 [NULL] 日期时间值
【发布时间】:2018-12-04 03:56:44
【问题描述】:
SqlCommand cmd = new SqlCommand("SELECT dateReceived FROM table1", conn);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader();

if (dr.HasRows)
{
     while (dr.Read())
     {
          object sqlDateTime = dr[0];
          DateTime? dt = (sqlDateTime == System.DBNull.Value)
                         ? (DateTime?)null
                         : Convert.ToDateTime(sqlDateTime);

          dtDateReceived.Value = sqlDateTime;
     }
 }

 dr.Close();
 cmd.Dispose();
 conn.Close();

这是我在 table1 中获取 dateReceived 的代码,考虑到它可能在 dateReceived 列上有一个空值。

我想以 Windows 形式在 datetimepicker 中显示它,但出现错误:

无法将类型“对象”隐式转换为 System.DateTime

我只想在 datetimepicker 控件上显示值(如果不是 null)。如果为 null,则什么都不会发生。

【问题讨论】:

标签: c# sql-server winforms datetimepicker


【解决方案1】:

你可以使用

var dateTime = dr[0] as DateTime;

它将返回 null 或 datetime。

【讨论】:

    【解决方案2】:

    你可以用这个:

    static async void Main(string[] args)
    {
       SqlConnection connection = new SqlConnection();
    
       SqlCommand command = new SqlCommand("", connection);
    
       SqlDataReader reader = command.ExecuteReader();
    
       while (await reader.ReadAsync())
       {
          if (reader.IsDBNull("columnName"))
          {
             throw new SqlNullValueException("Value in columnName is null");
          }
          else { }
       }
    }
    

    【讨论】:

      【解决方案3】:

      而不是

      object sqlDateTime = dr[0];
          DateTime? dt = (sqlDateTime == System.DBNull.Value)
          ? (DateTime?)null
          : Convert.ToDateTime(sqlDateTime);
      

      使用

      var dateTime = dr[0] != System.DBNull.Value
        ? (DateTime?)dr.GetDateTime(0) // parse the sql datetime and returns CLR DateTime
        : (DateTime?)null;
      

      【讨论】:

        【解决方案4】:

        你可以用HasValue点赞

         while (dr.Read())
             {
                  DateTime? sqlDateTime = dr[0];
                  DateTime? dt = sqlDateTime.HasValue
                                     ? sqlDateTime
                                 :null;
        
                  dtDateReceived.Value = dt;
             }
        

        确保您的 dtDateReceived 可以为空

        【讨论】:

        • 感谢投反对票.. 只需发表评论需要了解更多信息。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-14
        • 1970-01-01
        • 2017-11-05
        • 2020-09-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多