【发布时间】:2015-11-18 04:22:29
【问题描述】:
我正在尝试使用 SSRS 2010 网络服务以 html 格式调用现有报告以嵌入另一个网页。
我调用的报表依赖于报表中嵌入的一个参数和 3 个其他数据集。
当我在浏览器中调用报告时,报告运行良好。
但是当我使用 web 服务调用报告时,发送唯一需要的参数时,我收到了错误消息:
“无法读取数据集 MembershipRegistrationPayments 的下一个数据行。”
我很困惑,因为该报告在浏览器中完美运行,并且运行该报告所需的唯一“选择”是“俱乐部 ID”。
这是我目前的代码...
ReportExecutionService rsExec = new ReportExecutionService();
rsExec.Credentials = new NetworkCredential("usernamexxx", "passwordxxx", "domainxxx");
string report = "/DemoReport1";
bool forRendering = false;
string historyID = null;
string format = "MHTML";
string extension;
string mimeType;
string encoding;
string deviceInfo = null;
ReportExecution.Warning[] warnings;
string[] streamIDs;
ExecutionInfo execInfo = new ExecutionInfo();
ExecutionHeader execHeader = new ExecutionHeader();
rsExec.ExecutionHeaderValue = execHeader;
execInfo = rsExec.LoadReport(report, historyID);
var execParameters = new List<ReportExecution.ParameterValue>();
execParameters.Add(new ReportExecution.ParameterValue() { Name = "OrganisationID", Value = "1234" });
rsExec.SetExecutionParameters(execParameters.ToArray(), "en-GB");
byte[] reportBytes = rsExec.Render(
format,
deviceInfo,
out extension,
out mimeType,
out encoding,
out warnings,
out streamIDs);
生成报表时几乎没有调用数据集,因此无法移动到数据集中的第一条记录?
我迷路了。任何帮助将不胜感激!
特雷夫
【问题讨论】:
-
我今天遇到了这个确切的错误,但它在“无法获取下一个数据行”消息之后提供了更多信息。我认为这是一个类型转换问题。我怀疑唯一不同的是参数值,但从代码中可能并不明显。您是否能够捕获发送到 Web 服务器的 GET 并检查正在使用的 URL(如果它是这样工作的)。能否暂时将参数设置为可选,不带参数调用,看看是否有帮助?
-
我认为您可能是正确的。我看到错误“将 nvarchar 数据类型转换为 datetime 数据类型导致值超出范围。无法读取数据集 MembershipRegistrationPayments 的下一个数据行。”
-
这听起来像是报告本身的 SQL 问题,而不是您的代码。
-
报表中可能有多个数据集,并且可能在 SQL 中对其中任何一个不兼容的类型进行比较,或者“日期”参数可能具有错误的数据类型(参数是 nvarchar 和参数查询返回日期,反之亦然)
-
要使用 Profiler,您只需要能够连接到数据库 - 您能做到吗?如果不是......你只需要分而治之 - 一次只启用一个数据集,直到找到导致问题的数据集。然后禁用其中的一部分,直到缩小范围。
标签: c# reporting-services