检查ExecuteScalar结果是否存在的最有效方法是什么?

本文关键字:有效 方法 是什么 存在 ExecuteScalar 结果 结果是 是否 检查 | 更新日期: 2023-09-27 18:03:48

我看到了下面的代码:

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

…但我认为其中一个可能会更好:

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

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

检查ExecuteScalar结果是否存在的最有效方法是什么?

我想你已经回答了你自己的问题。没有比这更好的了

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

然而,从你的评论,似乎你真正想知道的是一个列名是否存在于一个表。出于这个目的,我建议您考虑使用DbDataAdapter.FillSchemaDbConnection.GetSchema。这两个选项都允许对数据库的所有列执行单个查询,而不是为每个列重新查询数据库。

首先,您的方法在效率方面没有任何(可测量的)差异,在这种情况下它只是无关紧要的。

您想检查什么?

  • 如果它可以返回null并且您想知道,请检查。那么你的第二个方法是最好的。
  • 如果查询返回一个数值(例如来自COUNT),并且您想知道它是否大于零,只需检查即可。那么最后一种方法就可以了。

然而,你的第一个方法不是好的实践,不要依赖异常在你的正常控制流。