有一页面统计,需从不同表中返回多个单值,如图片数、文章数、浏览数等。
sql语句这样写:"select count(id) from tab1; select count(id) from tab2;..."
使用ExecuteScalar怎么取到每个结果集中的值? 如果此路不通还有别的好办法吗?
我现在的办法是多次使用ExecuteScalar,感觉好像效率很差,最佳目标是连接一次数据库,能取来所有值。

解决方案 »

  1.   

    在存储过程里执行SQL语句。添加数据到临时表。查询临时表得数据。
    create #ls(js int)
    declare @sql varchar(300)
    set sql='insert into #ls select count(id) from tab1'
    esex(@sql)
    select * from #ls
      

  2.   

    ExecuteScalar只会返回第一行第一列的数据。对于你的这个要求可以不使用这个方法,而是使用DataAdapter的Fill返回一个DataTable。或者使用快捷的使用ExecuteReader来返回结果。使用Read循环下一个结果。
      

  3.   

    其实你的要求已不是第一行第一列了,而是第一列的所有数据。
    如果不想使用DataAdapter的Fill回一个表来取第一列的值,那么就直接使用ExecuteReader来取第一列的值。
      

  4.   

    select count(id) as id from tab1 union all select count(id) from tab2 union all select count(id) from tab3result:id
    -----------
    11029
    10153
    29298(3 行受影响)