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

时间:2013-03-12 23:09:44

标签: c# sql-server-ce

我看到了这段代码:

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;

2 个答案:

答案 0 :(得分:1)

我想你回答了自己的问题。你不能比这个好多了

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

但是,从您的评论中,您真正想要的是知道表名是否存在列名。为此,我建议您改为使用DbDataAdapter.FillSchemaDbConnection.GetSchema。这两个选项都允许您针对所有列对数据库执行单个查询,而不是为每个列重新查询数据库。

答案 1 :(得分:1)

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

你想检查什么?

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

然而,你的第一种方法并不是良好的做法,don't rely on exceptions在正常的控制流程中。