文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>关于ExecuteScalar您可能会疏忽的地方

关于ExecuteScalar您可能会疏忽的地方

时间:2011-05-12  来源:FrogTan

大家都很熟悉SqlCommand的ExecuteScalar方法:

object obj  = command.ExecuteScalar();

该方法会返回一个标量值。很多时候,我们需要对obj进行是否为空的验证。这时候问题就来了,到底是该

if( obj != null )

还是

if( obj != DBNull.Value)?

首先我们来看看ExecuteScalar的使用场景

  • 配合T-Sql的聚合函数使用,如Count
  • 当返回某一行特定列时也可以使用

总之就是当查询结果只是一个标量值的时候就可以使用。

接下来我们假定有这样一张数据表(Student):

ID PK
Name NOT NULL
Age NULL

再假设该表有如下数据:

ID Name Age
1 Tom NULL
2 Mike NULL

 

如果我们要取得所有Student中Age最大值,可以如下

SELECT MAX(Age) FROM dbo.Student WITH(NOLOCK)

在.NET 这一层我们就可以使用ExecuteScalar来取得值了。我们知道T-Sql的结果是NULL,但在.NET这边呢?我们一跟踪就会发现是DBNull.

因此我们可以就此下结论了么?不能。

紧接着再来看种情形。要求我们获取ID=3的学生的姓名

SELECT TOP 1 Name FROM dbo.Student WITH(NOLOCK)

WHERE ID = 3

很显然,该语句的结果是一个空的结果集。

这时候再去跟踪你就会发现返回值为null.

因此对于很多经常只简单判断!=null 或者!= DNNull.Value的童鞋要注意了,说不定什么时候代码就出问题了。

再简单总结下:当sql语句返回NULL时,.NET这一端的返回值为DBNull.Value

                    当sql语句这一端为空结果集时,.NET这一端为null.

希望对各位能有帮助。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载