Неправильный синтаксис рядом с обнуляемым параметром datetime - PullRequest
1 голос
/ 09 апреля 2020

У меня есть запрос, который имеет VerifiedDate, который является DateTime. Это может быть либо со значением, либо с нулем. Я добавил параметр, как показано ниже. Тем не менее, при попытке добавить к моему запросу, где пункт я получил исключение.

Parameters.Add(Context.CreateParameter("@VerifiedDate", 30, (object) Car.VerifiedDate ?? DBNull.Value, DbType.DateTime));

queryWhereClause = " AND VerifiedDate=@VerifiedDate";

Исключение:

System.Data.SqlClient.SqlException: 'Incorrect syntax near '='.'

1 Ответ

3 голосов
/ 09 апреля 2020

В конечном счете, SQL Серверу (в режиме совместимости с ANSI) требуется другой синтаксис для совпадения нуля. Честно говоря, в вашем случае я бы просто сделал:

if (Car.VerifiedDate.HasValue)
{
    Parameters.Add(Context.CreateParameter("@VerifiedDate", 30, Car.VerifiedDate.Value, DbType.DateTime));
    queryWhereClause = " AND VerifiedDate=@VerifiedDate";
}
else
{
    queryWhereClause = " AND VerifiedDate IS NULL";
}

Однако вы также можете сделать такие вещи, как:

AND (VerifiedDate=@VerifiedDate OR (VerifiedDate IS NULL AND @VerifiedDate IS NULL))

Сервер обычно будет работать лучше при первом подходе, так как он меньше условий и ветвей - и он может наиболее эффективно использовать индекс, если он существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...