控制台应用生成RDLC转PDF新增数据集时DataSet1查询执行错误如何解决
报错原因
- 核心原因是RDLC新增数据集
DataSet1后,你的代码没有给LocalReport对象绑定对应数据源,RDLC运行时尝试读取设计时内嵌的连接字符串自行查询数据,但控制台环境下要么找不到对应连接字符串配置,要么内嵌的连接字符串格式不符合运行要求,就触发了初始化字符串格式错误的提示。 - 补充:RDLC本地报表模式本身不支持自动查询数据库,所有用到的数据集都需要开发者提前查询好数据手动绑定,不可依赖设计阶段嵌入RDLC的连接字符串。你之前未添加数据集时,报表仅依赖传入的参数渲染,不需要数据源绑定,所以运行正常。
修复方案
- 首先按照RDLC中
DataSet1定义的字段结构,提前从数据库查询对应数据,可填充到DataTable或者对应业务类的集合中,保证字段名、数据类型和RDLC中的定义完全一致。 - 在初始化
LocalReport之后新增数据源绑定逻辑,修改后的完整代码参考如下:
const int extension = 1; var path = "Report1.rdlc"; var parameters = new Dictionary<string, string> { { "rp1", "Test Value to parameter" } }; // 新增:查询DataSet1需要的数据,以下为示例代码,请替换为你自己的查询逻辑 DataTable dataSet1Dt = new DataTable(); string connStr = "你的实际数据库连接字符串"; string querySql = "DataSet1对应的查询SQL语句"; using (SqlConnection conn = new SqlConnection(connStr)) { SqlDataAdapter adapter = new SqlDataAdapter(querySql, conn); adapter.Fill(dataSet1Dt); } var localReport = new LocalReport(path); // 新增:绑定数据源,第一个参数必须和RDLC中定义的数据集名称完全一致 localReport.AddDataSource("DataSet1", dataSet1Dt); var result = localReport.Execute(RenderType.Pdf, extension, parameters); byte[] file = result.MainStream; using (Stream stream = new FileStream("output.pdf", FileMode.Create)) { stream.Write(file, 0, file.Length); }
- 可选操作:打开RDLC文件删除设计阶段内嵌的连接字符串配置,避免运行时触发自动查询逻辑。
- 验证绑定的数据集名称、字段结构和RDLC中的定义完全匹配,避免出现额外的字段不匹配错误。
内容的提问来源于stack exchange,提问作者Clefor7
相关产品推荐
相关产品推荐

