ExecuteNonQuery()与ExecuteScalar()

ps:针对之前上一句修改一下,是我理解的问题。
ExecuteNonQuery()执行 select,如果不存在结果总是返回-1(因为我想通过影响的行数来判断数据库是否已经存在该数据),很是郁闷。 存在返回记录,SELECT*返回1,查询id返回对应的id,这一点理解也可用它来作为判断。(VS2015调试时参数化断点居然看不见传进去,郁闷了好久没有考虑到这个问题,的确是失误)
后来查了一下msdn,发现原来是这样的。虽然 ExecuteNonQuery 不返回任何行,但映射到参数的任何输出参数或返回值都会用数据进行填充。对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1 。
后来的解决方案是,使用ExecuteScalar(),判断他的返回值是否为空.
那么接下来的问题是如何判断为空,执行ExecuteScalar()返回的是一个object的类型,那么就分两种情况考虑,不然会报异常的。
object result = command.ExecuteScalar();
情形一:查询有值,此时返回一个对象第一行第一列的值(ps:为了提高查询效率,不建议使用SELECT *,建议查询主键,SELECT ID),此时object.toString()有值,即可判断。
情形二:查询无值,此时object.toString()必定会报异常。此时需判断DBNull.Value== result。
综合以上:总结
if (result==null||DBNull.Value== result)
{
无记录
}
if (result!=null&&DBNull.Value!= result)
{
有记录
}
注意或,与的区别。

                                                                                                              于博弈科技

你可能感兴趣的:(Error)