您的位置:首页 > 产品设计 > UI/UE

ExecuteNonQuery()与ExecuteScalar()

2015-10-08 23:15 344 查看
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)

{

有记录

}

注意或,与的区别。

于博弈科技
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 调试 数据