You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

控制台应用生成RDLC转PDF新增数据集时DataSet1查询执行错误如何解决

报错原因
  • 核心原因是RDLC新增数据集DataSet1后,你的代码没有给LocalReport对象绑定对应数据源,RDLC运行时尝试读取设计时内嵌的连接字符串自行查询数据,但控制台环境下要么找不到对应连接字符串配置,要么内嵌的连接字符串格式不符合运行要求,就触发了初始化字符串格式错误的提示。
  • 补充:RDLC本地报表模式本身不支持自动查询数据库,所有用到的数据集都需要开发者提前查询好数据手动绑定,不可依赖设计阶段嵌入RDLC的连接字符串。你之前未添加数据集时,报表仅依赖传入的参数渲染,不需要数据源绑定,所以运行正常。
修复方案
  1. 首先按照RDLC中DataSet1定义的字段结构,提前从数据库查询对应数据,可填充到DataTable或者对应业务类的集合中,保证字段名、数据类型和RDLC中的定义完全一致。
  2. 在初始化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);
}
  1. 可选操作:打开RDLC文件删除设计阶段内嵌的连接字符串配置,避免运行时触发自动查询逻辑。
  2. 验证绑定的数据集名称、字段结构和RDLC中的定义完全匹配,避免出现额外的字段不匹配错误。

内容的提问来源于stack exchange,提问作者Clefor7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:57:04