VS2008添加RDLC报表数据源连接SQL2016报版本不支持错误
问题描述
操作触发报错:无法打开与数据库的连接,返回错误信息:此服务器版本不受支持,仅支持Microsoft SQL Server 2005及更低版本的服务器
触发场景:维护基于ASP.Net 2.0的遗留系统时,在Visual Studio 2008中通过RDLC报表向导添加数据源触发报错。
环境约束:
- 开发工具固定为Visual Studio 2008
- 对接业务数据库为SQL Server 2016
- 终端为公司统一配发设备,权限受限,无法安装任何额外软件
- 常规公开可查的已知解决方案均已尝试,问题未解决
无软件安装依赖的可行解决思路
所有方案均不需要在本地开发机安装额外程序,适配权限受限的办公环境:
方案1:使用离线Schema文件绕开设计时版本校验
- 协调有对应权限的同事,从目标SQL Server 2016库中导出报表所需表/视图的结构,生成一份仅包含表结构、无业务数据的
.xsd数据集文件 - 将该
.xsd文件拷贝到当前项目的数据集存放目录,通过VS2008的「添加现有项」功能引入项目 - 配置RDLC数据源时,跳过「新建数据库连接」步骤,直接选择项目内已引入的离线数据集作为设计时数据源,避开向导的数据库版本检测逻辑
- 报表运行阶段不要使用设计器自动生成的数据库连接,在后台代码中手动初始化SQL Server 2016的连接,将查询结果填充为DataTable后绑定给ReportViewer控件,运行时不会触发设计时的版本校验规则,可正常加载数据。
- 协调有对应权限的同事,从目标SQL Server 2016库中导出报表所需表/视图的结构,生成一份仅包含表结构、无业务数据的
方案2:通过数据库端兼容级别配置绕过检测
该方案所有操作在数据库端完成,本地不需要安装任何工具:- 联系数据库管理员,在SQL Server 2016实例上新建一个仅用于报表设计的临时库,执行SQL语句
ALTER DATABASE [临时库名称] SET COMPATIBILITY_LEVEL = 90;将该库兼容级别设置为SQL Server 2005对应的版本号 - 在临时库中创建同义词,将报表需要用到的业务表映射到临时库下,不需要同步或拷贝实际业务数据
- 通过RDLC向导连接该临时库时,VS2008会将其识别为支持的SQL Server 2005版本,不会触发版本报错;完成报表设计后,将报表中引用的表路径替换为实际业务库的表路径即可,运行时不受临时库兼容级别影响。
- 联系数据库管理员,在SQL Server 2016实例上新建一个仅用于报表设计的临时库,执行SQL语句
方案3:手动编辑RDLC文件定义跳过向导
RDLC本身是标准XML格式的文本文件,可直接编辑不需要依赖可视化向导:- 先在项目业务代码中完成数据查询逻辑,确认代码层面可以正常连接SQL Server 2016,将报表所需数据填充为强类型DataTable
- 右键点击项目中的RDLC文件,选择「打开方式」,使用VS2008自带的XML编辑器打开文件
- 在文件的
<DataSources>和<DataSets>节点下,手动添加对应项目中已写好的DataTable的数据源配置,全程不需要触发设计器的数据库连接操作 - 保存XML配置后回到RDLC设计器,即可正常看到所有可用字段,拖拽完成报表布局设计即可。
内容的提问来源于stack exchange,提问作者Fahad Mughal
相关产品推荐
相关产品推荐

