我正在尝试使用SSRS 2010网络服务以html格式调用现有报告,以嵌入另一个网页。
我调用的报告取决于参数和报告中嵌入的其他3个数据集。
当我在浏览器中调用报告时,报告可以正常运行。
但是当我使用webservice调用报告时,发送所需的唯一参数我收到错误消息:
“无法读取数据集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);
生成报告时几乎没有调用数据集,因此它无法移动到数据集中的第一条记录?
我迷路了。非常感谢任何帮助!
崔佛
答案 0 :(得分:2)
唷!最后解决了!
背景:
我有一个数据集,它创建了一些在另一个数据集中使用的固定日期。
作为一个例子,这是ORIGINALLY生成该日期的1个SQL语句之一。
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
现在报告完美无缺!