ExecuteScalar 与 union 配合轻松实现取最大值等

作者:vkvi 来源:ITPOW(原创) 日期:2009-5-2

SqlCommand 的 ExecuteScalar 返回结果集的第一行第一列,所以我们常常用在取记录数、刚刚插入的 id、最大值等。

在取最大值这些时,需要考虑记录不存在的情况:

select Max(id) as id from tbl where category=1

如果没有符合条件的记录,那么返回的结果集就是 0 条记录,这种情况在实际应用中很可能发生。

所以上述 sql 不能用 ExecuteScalar 来取,应该用 DataView 来取,先判断记录数,再取值,麻烦一些。

为了方便,我们可以改造一下该 sql,仍用 ExecuteScalar 来取。

select Max(id) as id
    from tbl
    where category=1
    union select 0 order by id desc
  • 如果 id 不存在,那么返回的结果是 0,由于我们在设计数据库时,id 的种子值是 1,所以我们可以判断出最大值不存在。
  • 如果 id 存在,那么结果将会有两条:Max(id) 和 0,由于 order by 条件,第一行第一列是 Max(id),这样 ExecuteScalar 就轻松完成任务了。
相关文章