У меня есть консольное приложение С#, которое выполняет поиск в базе данных на 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. Это упрощенный пример, я буду дополнительно устанавливать значение или Null для @EffectiveDate.
Я прочитал другую информацию в Интернете, и кажется, что все, что мне нужно, это столбец базы данных, допускающий значение NULL, и использование DBNull.Value для параметра, и он должен работать. Что мне не хватает?