SSRS调用存储过程报错:ExecuteReader要求连接处于打开可用状态
问题原因分析
针对你遇到的SSRS调用存储过程报错ExecuteReader requires an open and available Connection. The connection's current state is closed.,但SSMS执行正常、直接嵌入脚本也能运行的情况,常见原因有以下几种:
- 存储过程中手动关闭了数据库连接:检查存储过程代码,是否存在
CLOSE、DISCONNECT这类主动关闭连接的语句。SSMS执行存储过程后会自动重新初始化连接,但SSRS的报表执行依赖持续的连接上下文,一旦连接被主动关闭,后续读取数据的操作就会触发错误。 - 存储过程包含干扰连接池的逻辑:如果存储过程里修改了连接池相关配置(比如
SET CONNECTION_TIMEOUT),或是使用了异步执行逻辑,可能导致SSRS的连接被提前回收,造成连接状态异常。 - 跨数据库操作导致连接上下文混乱:若存储过程涉及跨数据库访问,且存在切换数据库后未恢复上下文的情况(比如用
USE [OtherDB]切换后未切回原库),可能让SSRS误以为连接已关闭。 - SSRS数据源的凭据设置冲突:虽然直接执行脚本正常,但调用存储过程时,若SSRS数据源启用了“模拟登录”或“使用特定凭据”,可能导致存储过程执行时的连接权限或状态与直接执行脚本不同,进而触发连接关闭报错。
内容的提问来源于stack exchange,提问作者Andy Lindquist
相关产品推荐
相关产品推荐

