質問

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") ;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top