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
}
Ответы
Ответ 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") ;
}