Подтвердить что ты не робот

Int32.TryParse() или (int?) Command.ExecuteScalar()

У меня есть SQL-запрос, который возвращает только одно поле - идентификатор типа INT.

И я должен использовать его как целое в коде С#.

Какой способ быстрее и использует меньше памяти?

int id;
if(Int32.TryParse(command.ExecuteScalar().ToString(), out id))
{
  // use id
}

или

int? id = (int?)command.ExecuteScalar();
if(id.HasValue)
{
  // use id.Value
}

или

int? id = command.ExecuteScalar() as int?;
if(id.HasValue)
{
  // use id.Value
}
4b9b3361

Ответ 1

Разница между тремя показателями производительности незначительна. Узкое место перемещает данные из БД в ваше приложение, а не тривиальный вызов метода или метода.

Я бы пошел с:

int? id = (int?)command.ExecuteScalar();
if(id.HasValue)
{
  // use id.Value
}

Он не работает раньше, если в один прекрасный день люди меняют команду, чтобы вернуть строку или дату, по крайней мере, она сработает, и у вас будет возможность исправить ее.

Я бы просто пошел с простым int cast IF. Я всегда ожидал, что команда вернет один результат.

Примечание. Обычно я предпочитаю возвращать параметр out, чем выполнение скаляра выполнения, выполнение скаляра кажется хрупким (соглашение о том, что первый столбец в первой строке является возвращаемым значением, не подходит для меня).

Ответ 2

Если вы ожидаете, что команда вернет значение null, вы должны иметь в виду, что база данных null (DBNull) не совпадает с .NET null. Итак, преобразование DBNull в int? потерпит неудачу.

Я бы предложил следующее:

object result = command.ExecuteScalar();
int? id = (int?)(!Convert.IsDBNull(result) ? result : null);

Ответ 3

Если ни одно из вышеперечисленных работ (особенно для пользователей, которые борется с MySQL) почему бы вам не попробовать следующее?

int id = Convert.ToInt32(cmd.ExecuteScalar().ToString());

Ответ 4

Последний. Convert.ToInt32() также является опцией.

Ответ 5

int Result = int.Parse(Command.ExecuteScalar().ToString());

будет работать на С#.

Ответ 6

Используйте id.HasValue для максимального холодного коэффициента Nullable Type!

Ответ 7

if ((Int32)cmd.ExecuteScalar () ** 1) //en esta parece qu esta el error pero no lo veo
{
    Response.Redirect("Default.aspx");
}
else
{
    Response.Redirect("error.htm") ;
}