Как обработать [NULL] значения datetime из SQL Server в средство выбора даты и времени - PullRequest
0 голосов
/ 04 декабря 2018
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();

Это мой код для получения dateReceived в table1 , учитывая, что он может иметь нулевое значение в столбце dateReceived.

Я хотел бы отобразить его в datetimepickerв форме Windows, но я получаю сообщение об ошибке:

Не удается неявно преобразовать тип «объект» в System.DateTime

Все, что я хотел, это отобразить значение (если нетnull) на элемент управления datetimepicker.Если ноль, то ничего не произойдет.

Ответы [ 3 ]

0 голосов
/ 04 декабря 2018

вы можете использовать

var dateTime = dr[0] as DateTime;

, он вернет либо ноль, либо дату / время.

0 голосов
/ 04 декабря 2018

Вы можете использовать HasValue, как

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

          dtDateReceived.Value = dt;
     }

. Убедитесь, что ваш dtDateReceived обнуляется

0 голосов
/ 04 декабря 2018

вместо

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;
...