我要用一个存储过程作为数据源给报表提供数据,
问题是这个存储过程返回两个数据集。在报表的数据那块只能收到第一个数据集。
问题就是:第二个数据集,除了在写一个存储过程外,怎末搞定?谢谢,高人!

解决方案 »

  1.   

    那就分成两个存储过程来完成了,
    一个DataSet接收一个存储过程的结果集.
      

  2.   

    我也是才注意,呵呵。找了很久似乎这个选项是\true就可以返回多个结果集。可是我选上了,还是没有用。
    MultipleActiveResultSets=True干吧,无语!
      

  3.   

    这上面讲了一种方法,
    不知道是否适合你这个种情况,
    大概意思是:将两个DataSet作为一个结果集返回,并设定一个标识位,
    然后在报表端区分出来,通过过滤将两个结果集分开显示出来,
    select fields....,'1stquery' as category
    from.....
    ..union allselect fields,...,'2nd query'
    from...
    ....
    ------------------
    详细参考如下连接:
    http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=102254
      

  4.   

    使用 MARS 时的特殊注意事项通常情况下,现有的应用程序不需要修改,即可使用启用 MARS 的连接。但是,如果要在应用程序中使用 MARS 功能,应了解下列特殊注意事项。
    语句交替MARS 操作在服务器上同步执行。允许 SELECT 和 BULK INSERT 语句的语句交替。但是,数据操作语言 (DML) 和数据定义语言 (DDL) 语句会自动执行。将阻止任何在执行原子批处理时尝试执行的语句。服务器上的并行执行不是 MARS 功能。如果在 MARS 连接下提交两个批处理,其中一个批处理包含 SELECT 语句,另一个包含 DML 语句,DML 可以在 SELECT 语句执行过程中开始执行。但是,DML 语句必须运行完成,SELECT 语句才可以继续执行。如果两个语句在相同事务下运行,读取操作将看不到 DML 语句在 SELECT 语句开始执行后所作的任何更改。SELECT 语句中的 WAITFOR 语句在等待时不生成事务,即直到生成第一行时才生成事务。这意味着在 WAITFOR 语句等待时,无法在相同连接内执行任何其他批处理。
    MARS 会话缓存如果打开启用了 MARS 的连接,将创建一个逻辑会话,这样会增加系统开销。为了使系统开销最小并提高性能,SqlClient 将 MARS 会话缓存在连接内。缓存最多可以包含 10 个 MARS 会话。用户不可调整此值。如果达到会话限制,将创建一个新会话 — 不会生成错误。缓存及其包含的会话针对特定连接;不在连接之间共享。会话释放后,除非已达到池的上限,否则,将返回池中。如果缓存池已满,会话将关闭。 MARS 会话不会过期。只在连接对象断开后才进行清理。MARS 会话缓存不会预加载。如果应用程序需要更多的会话,将加载该会话。
    线程安全性MARS 操作不是线程安全的。
    连接池启用 MARS 的连接像任何其他连接一样建立池连接。如果应用程序打开两个连接,一个启用了 MARS,一个禁用了 MARS,这两个连接将位于独立的池中。有关更多信息,请参见使用连接池。
    url:http://msdn.microsoft.com/zh-cn/library/h32h3abf(VS.80).aspx
      

  5.   

    哈哈,晕。我得为自己的草率付出点代价。
    我谢谢楼主哈!!!建议差不多就改吧,从现实来看,去做比较现实。引用 5 楼 being21 的回复:
    我也是才注意,呵呵。找了很久似乎这个选项是\true就可以返回多个结果集。可是我选上了,还是没有用。 
    MultipleActiveResultSets=True 干吧,无语! 这就是我 说 干吧 的意思
      

  6.   

    hehe
    都改了。存储过程都拆开了。哎~