Как я могу проверить DBNull при выполнении моей команды только один раз? - PullRequest
7 голосов
/ 08 января 2009

Когда я получаю любое скалярное значение из базы данных, я обычно пишу код, подобный этому, для пустых полей.

cmd.ExecuteScalar() == DBNull.Value ? 0 : (int)cmd.ExecuteScalar()

Но мне это не нравится, потому что он выполняет инструкцию Executescalar дважды. Это дополнительная поездка на сервер для моего сайта, и в пользу производительности я не хочу этого делать.

Можно ли как-нибудь избавиться от этого лишнего ExecuteScalar ()?

Ответы [ 3 ]

17 голосов
/ 08 января 2009

Напишите себе метод расширения для команды sql.

public static T ExecuteNullableScalar<T>(this SqlCommand cmd)
    where T : struct
{
    var result = cmd.ExecuteScalar();
    if (result == DBNull.Value) return default(T);
    return (T)result;
}

Использование становится:

int value = cmd.ExecuteNullableScalar<int>();
12 голосов
/ 08 января 2009

Просто используйте переменную для кэширования результата:

var o = cmd.ExecuteScalar();
return o == DBNull.Value ? 0 : (int)o;
4 голосов
/ 08 января 2009
 object o = cmd.ExecuteScalar();
 return (o== DBNull.Value) ? 0 : (int)o;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...