RDL Report无法渲染生成报错,请问rdl文件的连接在哪里设置?
问题原因
当前报错的核心是你创建LocalReport实例后,既没有为RDL文件中定义的DataSet1配置数据源,也没有覆盖RDL内置的数据库连接配置,RDL默认尝试调用内置连接字符串访问数据库时,获取到了空的身份凭证,因此触发登录失败错误。
解决方案
方案1:代码中直接传入DataSet1对应的数据(推荐)
不需要让RDL自动查询数据库,直接在业务代码中查询好对应数据,赋值给对应数据集即可,修改后的代码示例如下:
const int extension = 1; var path = Path.Combine(_webHostEnvironment.WebRootPath, "Reports", "test.rdl"); var parameters = new Dictionary<string, string> { { "rp1", "Test Value to parameter" } }; var localReport = new LocalReport(path); // 新增:查询DataSet1需要的业务数据,替换为你自己的查询逻辑 var dataSet1Data = _dbContext.你的业务表.Where(x => x.过滤条件).ToList(); // 给LocalReport绑定数据集,注意第一个参数名称必须和RDL里定义的数据集名称完全一致,这里是DataSet1 localReport.AddDataSource("DataSet1", dataSet1Data); var result = localReport.Execute(RenderType.Pdf, extension, parameters); return File(result.MainStream, "application/pdf");
注意:
AddDataSource的第一个参数必须和RDL文件中定义的数据集名称完全匹配,大小写也要统一,否则会出现识别不到数据集的问题。
方案2:覆盖RDL内置的数据库连接配置
如果你需要让RDL自行执行查询拉取数据,可以在初始化LocalReport后,手动设置连接字符串覆盖RDL的内置配置:
// 初始化LocalReport后添加如下代码 localReport.DataSourcesConnections.Add(new DataSourceConnection { Name = "RDL中定义的数据源名称", ConnectionString = "你的完整数据库连接字符串" });
你也可以直接编辑RDL文件修改内置连接:用报表设计器打开rdl文件,找到「数据源」选项,双击对应的数据源,在连接配置页修改连接字符串和身份验证信息即可。
注意事项
- 如果你使用的是AspNetCore.Reporting低版本包,
AddDataSource方法的参数顺序或重载可能存在差异,只要保证数据集名称匹配即可 - 空用户登录失败的问题,绝大多数场景都是没有手动传入数据源,RDL读取内置连接时未拿到身份凭证导致,优先使用方案1处理,可控性更高
内容的提问来源于stack exchange,提问作者Clefor7
相关产品推荐
相关产品推荐

