У меня есть консольное приложение C #, которое выполняет поиск в базе данных на SQL Server 2014. Оно запрашивает таблицу со столбцом DateTime с именем EffectiveDate, который допускает пустые значения.
Если я пишу стандартный запрос SQL, который использует«ГДЕ EffectiveDate is NULL», результаты возвращаются правильно.Если я изменю предложение WHERE на принятие параметра и установлю для этого параметра значение DBNull.Value, результат будет нулевым.
Пример 1 Использование IS NULL -> resultObj имеет соответствующее значение:
public void RetrieveFileType()
{
string sSQL = "SELECT [FileType] " +
"FROM DTCC_APP_ProcessControl " +
"WHERE [EffectiveDate] IS NULL ";
using (SqlConnection oConn = GetNewConnection())
{
using (SqlCommand cmd = new SqlCommand(sSQL, oConn))
{
object resultObj = cmd.ExecuteScalar();
}
}
}
Пример 2 Использование DBNull.Value -> resultObj = null:
public void RetrieveFileType()
{
string sSQL = "SELECT [FileType] " +
"FROM DTCC_APP_ProcessControl " +
"WHERE [EffectiveDate] = @EffectiveDate";
using (SqlConnection oConn = GetNewConnection())
{
using (SqlCommand cmd = new SqlCommand(sSQL, oConn))
{
cmd.Parameters.AddWithValue("@EffectiveDate", DBNull.Value);
object resultObj = cmd.ExecuteScalar();
}
}
}
Я также пытался:
cmd.Parameters.Add("@EffectiveDate", SqlDbType.DateTime).Value = DBNull.Value;
и
cmd.Parameters.AddWithValue("@EffectiveDate", SqlDateTime.Null);
Единственный раз, когда я получаюрезультат, если я использую IS NULL.Это упрощенный пример, я буду необязательно устанавливать значение или Нуль для @ EffectiveDate.
Я прочитал другую информацию в Интернете, и мне кажется, что все, что мне нужно, это столбец базы данных, обнуляемый нулем, и использовать DBNull.Value дляпараметр и он должен работать.Чего мне не хватает?