【问题标题】:SSRS - Webservice - DataSet - Cannot read the next data row for the datasetSSRS - Web 服务 - 数据集 - 无法读取数据集的下一个数据行
【发布时间】: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


【解决方案1】:

呸!终于修好了!

背景:

我有一个数据集,它创建了许多在另一个数据集中使用的固定日期。

作为一个例子,这就是生成该日期的 SQL 语句中的 1 条原来的样子..

SELECT
CASE
WHEN getdate() >= DATEADD(Day, 0, DATEADD(Month, 3, DATEADD(Year, DATEDIFF(Year, 0, getdate()), 0))) THEN DATEADD(Day, 0, DATEADD(Month, 3, DATEADD(Year, DATEDIFF(Year, 0, getdate()), 0)))
WHEN getdate() <= DATEADD(Day, 0, DATEADD(Month, 3, DATEADD(Year, DATEDIFF(Year, 0, getdate()), 0))) THEN DATEADD(Year, - 1, DATEADD(Day, 0, DATEADD(Month, 3, DATEADD(Year, DATEDIFF(Year, 0, getdate()), 0))))
END AS StartDate

我已通过在 SQL 语句中将日期结果转换为 varchar 来解决此问题,以便报告服务器不再尝试“内部”执行此操作

所以,我的 SQL 现在看起来像这样:

SELECT
CASE
WHEN getdate() >= DATEADD(Day, 0, DATEADD(Month, 3, DATEADD(Year, DATEDIFF(Year, 0, getdate()), 0))) THEN CONVERT(varchar,DATEADD(Day, 0, DATEADD(Month, 3, DATEADD(Year, DATEDIFF(Year, 0, getdate()), 0))) ,113)
WHEN getdate() <= DATEADD(Day, 0, DATEADD(Month, 3, DATEADD(Year, DATEDIFF(Year, 0, getdate()), 0))) THEN CONVERT(varchar,DATEADD(Year, - 1, DATEADD(Day, 0, DATEADD(Month, 3, DATEADD(Year, DATEDIFF(Year, 0, getdate()), 0)))) ,113)
END AS StartDate

现在报告完美运行!

【讨论】:

    猜你喜欢
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多