2013-11-08 3 views
3

ExecuteScalar() иногда возвращает пустой объект -not null- хотя запись существует. Когда я анализирую этот объект с помощью quickwatch, я вижу, что object.GetType() равен DbNull. Я могу обработать этот пустой объект, но мне нужно знать, почему он возвращает пустой объект, хотя запись существует.ExecuteScalar() иногда возвращает пустой, но не нулевой объект. Зачем?

string sql = @"SELECT SentDate 
       FROM dbo.EmailOut          
       WHERE ID = @ID"; 
SqlCommand cmd = new SqlCommand(sql, _cnn); 
cmd.CommandType = System.Data.CommandType.Text; 
cmd.Parameters.Add(new SqlParameter("@ID", ID)); 
object obj = cmd.ExecuteScalar(); 
if (obj == null) 
    return false 
sentDate = (DateTime)obj; 
cmd.Dispose(); 

В большинстве случаев мой запрос работает отлично. Можете ли вы проверить мой код?

+0

Этот "пустой" объект * есть * null. –

+3

Записи могут существовать, но, возможно, столбец «SentDate» равен «null»? –

+0

В надежде, что это всего лишь пример, но вы должны обернуть вас 'SqlCommand' в операторе' using' –

ответ

9

Возвращаемое значение null означает, что запись не найдена.

Возвращаемое значение DBNull означает, что запись была найдена, но значение SentDate в этой записи NULL.

+0

, но отправлено не является – cihata87

+0

@ cihata87: Это ... удивительно. Вы уверены, что? Можете ли вы воспроизвести проблему? – Heinzi

+0

да Я определенно уверен – cihata87

 Смежные вопросы

  • Нет связанных вопросов^_^