Int32.TryParse() または (int?)command.ExecuteScalar()
-
19-09-2019 - |
質問
INT 型の ID というフィールドを 1 つだけ返す SQL クエリがあります。
そして、それをC#コードで整数として使用する必要があります。
どちらの方法が速く、メモリ使用量も少なくて済みますか?
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
}
解決
3 つのパフォーマンスの違いは無視できます。ボトルネックは、単純なキャストやメソッド呼び出しではなく、DB からアプリにデータを移動することです。
私なら次のようにします:
int? id = (int?)command.ExecuteScalar();
if(id.HasValue)
{
// use id.Value
}
それ 早く失敗する, 、ある日、人々が文字列または日付を返すようにコマンドを変更した場合、少なくともクラッシュし、それを修正する機会が得られます。
私もシンプルなものを使います int
キャスト もし 私は常にコマンドが単一の結果を返すことを期待していました。
注意してください、私は通常、スカラー実行よりも出力パラメータを返すことを好みます。スカラー実行は脆弱に感じます(最初の行の最初の列が戻り値であるという慣例は、私にとっては適切ではありません)。
他のヒント
コマンドが null を返すことが期待される場合は、データベースが null (DBNull) は .NET null と同じではありません。では、DBNull を int に変換しますか?失敗するだろう。
次のことをお勧めします。
object result = command.ExecuteScalar();
int? id = (int?)(!Convert.IsDBNull(result) ? result : null);
(特にMySQLので闘っているユーザーの場合)上記の作品のどれもあれば なぜあなたは、次を試してみませんか?
int id = Convert.ToInt32(cmd.ExecuteScalar().ToString());
int Result = int.Parse(Command.ExecuteScalar().ToString());
C#で動作します。
後者。 Convert.ToInt32()
もオプションです。
最大のNullable型のクールな要因のために使用id.HasValue!
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") ;
}
所属していません StackOverflow