-1

私はこのコードを見ています:

object objvalid = cmd.ExecuteScalar();
//made it this far - must not have thrown an exception
retVal = true;

...しかし、これらの1つがより良いかもしれないと考えています:

object objvalid = cmd.ExecuteScalar();
retVal = (null != objvalid);

..。

Int32 anybodyThere = (Int32) cmd.ExecuteScalar();
retVal = anybodyThere > 0;
4

2 に答える 2

1

あなたはあなた自身の質問に答えたと思います。あなたはこれよりはるかに良くなることはできません

object objvalid = cmd.ExecuteScalar();
retVal = (null != objvalid);

しかし、あなたのコメントから、あなたが本当に欲しいのは、テーブルに列名が存在するかどうかを知りたいようです。この目的のために、代わりにDbDataAdapter.FillSchemaorを使用することを検討することをお勧めしますDbConnection.GetSchema。どちらのオプションでも、すべての列に対してデータベースを再クエリするのではなく、すべての列に対してデータベースに対して単一のクエリを実行できます。

于 2013-03-12T23:16:23.180 に答える
1

まず、あなたのアプローチは効率の点で(測定可能な)違いはありません。この場合は無関係です。

何をチェックしますか?

  • それが戻る可能性がnullあり、それを知りたい場合は、それを確認してください。次に、2番目のアプローチが最適です。
  • クエリが数値 (たとえば from COUNT) を返し、それがゼロより大きいかどうかを知りたい場合は、それを確認してください。その後、最後のアプローチは問題ありません。

ただし、最初のアプローチは適切な方法ではありません。通常の制御フローで例外に依存しないでください。

于 2013-03-12T23:23:26.527 に答える