C# 在内存中生成SSRS报告
我正在研究在内存中生成SSRS报告以作为邮件附件附加的解决方案。我用的是2010版 报表具有必需的参数,为使报表正确,应填写这些参数 我发现很少有解决方法可以做到这一点: 解决方案1 使用MS nativeC# 在内存中生成SSRS报告,c#,reporting-services,reportviewer,C#,Reporting Services,Reportviewer,我正在研究在内存中生成SSRS报告以作为邮件附件附加的解决方案。我用的是2010版 报表具有必需的参数,为使报表正确,应填写这些参数 我发现很少有解决方法可以做到这一点: 解决方案1 使用MS nativeReportViewerclass。我们可以在内存中实例化对象,连接到服务器,并使用控制API以所需格式呈现报告 report.ServerReport.ReportServerCredentials = new MyCredentials(...); report.ServerReport.
ReportViewer
class。我们可以在内存中实例化对象,连接到服务器,并使用控制API以所需格式呈现报告
report.ServerReport.ReportServerCredentials = new MyCredentials(...);
report.ServerReport.ReportServerUrl = new Uri("ssrs_url");
report.ServerReport.ReportPath = "path-to-report";
byte[] reportData = report.ServerReport.Render("excel");
该解决方案有一个主要缺点-它需要大量依赖项才能使用报告控制。因此,在分层架构中很难使用,因为较低的层具有有限的预定义依赖项集,这些依赖项是松散耦合的,并且很容易移植到各种操作系统和云堆栈中
所以在我的情况下不能采用这种解决方案
解决方案2
使用报表服务器公共API访问已采用所需格式的数据。我发现这是可以实现的,MS证实了这一点。这里是链接
因此,我们只需使用正确配置的链接即可访问数据:
此解决方案最适合我的需要,但我不知道如何将报表参数传递到此报表?另外,如何首先针对SSRS报表服务器进行身份验证
有人能帮我吗?所以,我终于写了一个答案 首先:遗憾的是,在使用报表的简单URL访问时,我找不到任何包含参数的方法。我还没有真的与之合作过。因此,对于您的具体案例,可能还有另一个(更好的)解决方案 关于您在第一个解决方案中所述的限制: 我实际上不知道你在用什么“框架”,但如果你不能用它,那就无关紧要了 我建议您使用SSRS Web服务,正如我在评论中所说的那样。有关这方面的基本信息可以找到。基本上,您只需执行一些简单的步骤:
var client = new ReportExecutionService();
client.Url = "UrlToReportExecutionASMXonYourServer";
client.Credentials = yourCredentials // (is of type System.Net.ICredentials)
client.LoadReport2("RelativePathToYourReportOnServer", null);
var parameters = new ParameterValue[amountOfYourParameters];
parameters[0] = new ParameterValue() { Name = "ParamNameInReport", Value = "Value" };
client.SetExecutionParameters(parameters, CultureInfo.CurrentCulture.Name.ToLowerInvariant());
string encoding, mimeType, extension, deviceInfo;
Warning[] warnings;
string[] streamIDs;
var result = client.Render("ExportFormatOfDesiredResult", deviceInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs);
例如,“ExportFormatOfDesiredResult”可以替换为“Xml”、“Pdf”、“Word”等。
我
然后,您的结果将是一个字节流,您可以将其返回到您的客户机、附加到邮件或任何您想用它做的事情
我希望这对你有帮助。如果出于任何原因,这不适合您的需要,请随时寻求进一步的帮助或让我知道。(请详细描述一下您的体系结构及其限制,因为我目前不清楚您需要什么以及您不能做什么。)因此,我最终决定写一个答案 首先:遗憾的是,在使用报表的简单URL访问时,我找不到任何包含参数的方法。我还没有真的与之合作过。因此,对于您的具体案例,可能还有另一个(更好的)解决方案 关于您在第一个解决方案中所述的限制: 我实际上不知道你在用什么“框架”,但如果你不能用它,那就无关紧要了 我建议您使用SSRS Web服务,正如我在评论中所说的那样。有关这方面的基本信息可以找到。基本上,您只需执行一些简单的步骤:
var client = new ReportExecutionService();
client.Url = "UrlToReportExecutionASMXonYourServer";
client.Credentials = yourCredentials // (is of type System.Net.ICredentials)
client.LoadReport2("RelativePathToYourReportOnServer", null);
var parameters = new ParameterValue[amountOfYourParameters];
parameters[0] = new ParameterValue() { Name = "ParamNameInReport", Value = "Value" };
client.SetExecutionParameters(parameters, CultureInfo.CurrentCulture.Name.ToLowerInvariant());
string encoding, mimeType, extension, deviceInfo;
Warning[] warnings;
string[] streamIDs;
var result = client.Render("ExportFormatOfDesiredResult", deviceInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs);
例如,“ExportFormatOfDesiredResult”可以替换为“Xml”、“Pdf”、“Word”等。
我
然后,您的结果将是一个字节流,您可以将其返回到您的客户机、附加到邮件或任何您想用它做的事情
我希望这对你有帮助。如果出于任何原因,这不适合您的需要,请随时寻求进一步的帮助或让我知道。(请详细描述您的体系结构及其限制,因为我目前不知道您需要什么,不能做什么。)使用ReportingServices Web服务是一种选择吗?根据您的SSRS版本(您可以将其包含在帖子中),您可以在此处找到服务asmx:。是的,我有所需的所有数据。如何将数据传递给特定的报表参数。我已经要求在渲染报告之前填写属性。现在有一个约会,稍后将返回给您(如果没有其他人更快;))同时查看MSDN以获取服务。使用ReportingServices Web服务是一种选择吗?根据您的SSRS版本(您可以将其包含在帖子中),您可以在此处找到服务asmx:。是的,我有所需的所有数据。如何将数据传递给特定的报表参数。我已经要求在渲染报告之前填写属性。现在有一个约会,稍后将返回给您(如果没有其他人更快;))同时查看MSDN以获取服务。