如何处理从SQL Server到datetimepicker的datetime的[NULL]值

时间:2018-12-04 03:56:45

标签: c# sql-server winforms datetimepicker

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显示它,但出现错误:

  

无法将类型'object'隐式转换为System.DateTime

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

4 个答案:

答案 0 :(得分:0)

您可以使用

var dateTime = dr[0] as DateTime;

它将返回null或日期时间。

答案 1 :(得分:0)

您可以使用此:

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 { }
   }
}

答案 2 :(得分:-1)

而不是

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;

答案 3 :(得分:-1)

您可以像使用#include <iostream> #include <Eigen/Core> using namespace Eigen; int main() { typedef VectorXcf T; T mat(10); const T& matConstRef = mat; T* nc = const_cast<T*>(&matConstRef); nc->setConstant(T::Scalar(3.4)); std::cout << *nc << "\n\n"; Map<T> map = Map<T>(const_cast<T::Scalar*>(matConstRef.data()), matConstRef.rows(), matConstRef.cols()); map << 0, 1, 2, 3, 4, 5, 6, 7, 8, 9; std::cout << map << "\n\n"; return 0; }

HasValue

确保您的 while (dr.Read()) { DateTime? sqlDateTime = dr[0]; DateTime? dt = sqlDateTime.HasValue ? sqlDateTime :null; dtDateReceived.Value = dt; } 可为空