It is often required to execute a SSRS report from within C# and save it in the required file format like PDF, XLS etc.
SQL Server Reporting Services (SSRS) exposes two web services using which we can execute a report and save it in the required file format. The two web services are:
- Reporting Service 2005 : http://[SERVER]
/reportserver/reportservice2005.asmx - Report Execution Service : http://[SERVER]
/reportserver/reportexecution2005.asmx
Add the above two web services as "Web Reference" to your project with the following namespace RS2005 and RE2005:
Use the C# code below to execute and save the report:
public static void SaveReport()
{
RS2005.ReportingService2005 rs;
RE2005.ReportExecutionService rsExec;
// Create a new proxy to the web service
rs = new RS2005.ReportingService2005();
rsExec = new RE2005.ReportExecutionService();
// Authenticate to the Web service using Windows credentials
rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
rsExec.Credentials = System.Net.CredentialCache.DefaultCredentials;
rs.Url = "http://<SERVER>/reportserver/reportservice2005.asmx";
rsExec.Url = "http://<SERVER>/reportserver/reportexecution2005.asmx";
string historyID = null;
string deviceInfo = null;
string format = "EXCEL";
Byte[] results;
string encoding = String.Empty;
string mimeType = String.Empty;
string extension = String.Empty;
RE2005.Warning[] warnings = null;
string[] streamIDs = null;
// Path of the Report - XLS, PDF etc.
string fileName = @"c:\samplereport.xls";
// Name of the report - Please note this is not the RDL file.
string _reportName = @"/Marketing_Report";
string _historyID = null;
bool _forRendering = false;
RS2005.ParameterValue[] _values = null;
RS2005.DataSourceCredentials[] _credentials = null;
RS2005.ReportParameter[] _parameters = null;
try
{
_parameters = rs.GetReportParameters(_reportName, _historyID, _forRendering, _values, _credentials);
RE2005.ExecutionInfo ei = rsExec.LoadReport(_reportName, historyID);
RE2005.ParameterValue[] parameters = new RE2005.ParameterValue[1];
if (_parameters.Length > 0)
{
//parameters[0] = new RE2005.ParameterValue();
//parameters[0].Label = "";
//parameters[0].Name = "";
//parameters[0].Value = "";
}
rsExec.SetExecutionParameters(parameters, "en-us");
results = rsExec.Render(format, deviceInfo,
out extension, out encoding,
out mimeType, out warnings, out streamIDs);
using (FileStream stream = File.OpenWrite(fileName))
{
stream.Write(results, 0, results.Length);
}
}
catch (Exception ex)
{
throw ex;
}
}
Following output file formats are available: XML, CSV, IMAGE, PDF, EXCEL, WORD, HTML 4.0 and MHTML
Hope this helps!

35 comments:
hi..
how can i show a report, deployed at SSRS report server, in web application using C#.
please help
Lucky
You can get the report using the above code in HTML format and then render the same using ASP.NET application.
Hi Sandeep,
Which report path should i provide. The report is different server and i am developing on a different server.
So how do i modify this line
string _reportName = @"/Marketing_Report";
Thanks sandeep..
My report is getting 3 parameteres. How can i set these parameters...
And have you any example code for this.
Hi Jignesh,
We using the above C# code to execute SSRS report we have to provide the exact report name that appears on the ReportManager UI. We CANNOT provide the rdl file name instead. In the above example the @"/Marketing_Report", here Marketing_Report is the name of the report. If your report is places in a subdirectory, then give the name as:
@"Subdirectory/ReportName"
Hi Dalvir,
You should know the parameters that you want to set. You can set them using the following code:
if (_parameters.Length > 0)
{
//parameters[0] = new RE2005.ParameterValue();
//parameters[0].Label = "";
//parameters[0].Name = "";
//parameters[0].Value = "";
}
Dood you are just wonderfull...Thanks!!
hi Sandeep.
I am using the following code to execute my report and to show it in Html form. But there is an error on rsExec.Render(......
"You have attempted to use a rendering extension that is either not registered for this report server or it is not supported in this edition of Reporting Services. ---> Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: You have attempted to use a rendering extension that is either not registered for this report server or it is not supported in this edition of Reporting Services."
My Code is [Code]
ReportService2005.ReportingService2005 rs;
ReportExecution2005.ReportExecutionService rsExec;
rs = new ReportService2005.ReportingService2005();
rsExec = new ReportExecution2005.ReportExecutionService();
rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
rsExec.Credentials = System.Net.CredentialCache.DefaultCredentials;
rs.Url = "http://174.129.89.91/reportserver/reportservice2005.asmx";
rsExec.Url = "http://174.129.89.91/reportserver/reportexecution2005.asmx";
string historyID = null;
string deviceInfo = null;
string format = "HTML";
Byte[] results;
string encoding = String.Empty;
string mimeType = String.Empty;
string extension = String.Empty;
ReportExecution2005.Warning[] warnings = null;
string[] streamIDs = null;
string fileName = @"D:\test.html";
string _reportName = @"//Mydemo";
string _historyID = null;
bool _forRendering = false;
ReportService2005.ParameterValue[] _values = null;
ReportService2005.DataSourceCredentials[] _credentials = null;
ReportService2005.ReportParameter[] _parameters = null;
try
{
_parameters = rs.GetReportParameters(_reportName, _historyID, _forRendering, _values, _credentials);
ReportExecution2005.ExecutionInfo ei = rsExec.LoadReport(_reportName, historyID);
ReportExecution2005.ParameterValue[] parameters = new ReportExecution2005.ParameterValue[3];
if (_parameters.Length > 0)
{
parameters[0] = new ReportExecution2005.ParameterValue();
parameters[0].Label = "";
parameters[0].Name = _parameters[0].Name;
parameters[0].Value = "1";
parameters[1] = new ReportExecution2005.ParameterValue();
parameters[1].Label = "";
parameters[1].Name = _parameters[1].Name;
parameters[1].Value = Convert.ToString(DateTime.Now.AddDays(-7));
parameters[2] = new ReportExecution2005.ParameterValue();
parameters[2].Label = "";
parameters[2].Name = _parameters[2].Name;
parameters[2].Value = Convert.ToString(DateTime.Now);
}
rsExec.SetExecutionParameters(parameters, "en-us");
results = rsExec.Render(format, deviceInfo,
out extension, out encoding,
out mimeType, out warnings, out streamIDs);
using (FileStream stream = File.OpenWrite(fileName))
{
stream.Write(results, 0, results.Length);
}
}
catch (Exception ex)
{
throw ex;
}
[/Code]
hi sandeep ..
I suceed in getting reports in html form . but there is a problem while using reportserver. I am using
System.Net.CredentialCache.DefaultCredentials
to set credentials.
But when report shows in browser then it asks for credetials.
how can i set creadential so that there is no need to set credentials.
I have also used
rs.Credentials =new System.Net.NetworkCredential("username", "password", "Domain")
but nothing happnes.
So should i do..
Please help.
Hi Sandeep,
I want to generate the excel file on run time and then export the SSRS Report to it.Is it possible ?
Hi Sandeep,
My webpage is timin gout after 45 settings during RENDER..is there an way to set timeout for render operation.
Thanks,
Ankit
hi Sandeep.
I have drillthrough reports. And i am using reportserver web service to show them. Now there is a problem that when drillthrough event fire then it navigate to the report server directly.
I wants to show the child report as on my own page. Is there any way to handle drilldown reports.
Please help
Hi Sandeep,
Its help me a lot. Can you please tell me how to send the reports as attachment from Report Server?
Thanks
Bhaskar Rao.Thalatam
Hi Sandeep,
i want to loop the parameter. such as date parameter instead of assigning specific date i want to generate multiple date simultaneously. can you give some idea to me.
Here's the code:
parameters[0] = new re2005.ParameterValue();
parameters[0].Label = null;
parameters[0].Name = "STRRPTDATE";
parameters[0].Value = "18/09/2009";
Thanks
Alut
thanks brother .I have some weakness for that .
thanks again.
webmaster forum
U r a genius :)
Regards
~A
What benefit is there using soap to call the report instead of simply accessing http://machine/ReportServer/Pages/ReportViewer.aspx?/path/to/report&rs:Command=Render¶m1=value¶m2=value&rs:Format=Pdf?
Cheers
Hi ...
my name is Abdullah Bahmani!!!!
I'm trying to write an application that help the RUP user to save they works and ...
I need to desing a form that users can create their shape and diagrams such as class digram and ...
I find a solution by visio activeX ... but I need to work Rational rose ActiveX but I dont Know how to do that ...
please help me to do this ...
I have to say you I work in c#
Hi Sandeep,
Is there any way we can add checkbox/Drop down in ssrs so that the end user can select what report he needs based on the selection and also basic report.
Sandeep,
An enormously helpful post - very well written and concise. Many, many thanks.
Craig
hi sandeep,
can we read direct data of report through web service?
also if i am not passing userid and password to webservice but can i use tokan and get authenticated..?
I am also stuck with this Error. could someone tell how to fix this Issue?
You have attempted to use a rendering extension that is either not registered for this report server or it is not supported in this edition of Reporting Services. ---> Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: You have attempted to use a rendering extension that is either not registered for this report server or it is not supported in this edition of Reporting Services."
Thanks,
JFR
I have added both web references to my project.
# Reporting Service 2005 : http://[SERVER]/reportserver/reportservice2005.asmx
# Report Execution Service : http://[SERVER]/reportserver/reportexecution2005.asmx
However I am getting the error:
The type or namespace name 'ReportingService2005'
The type or namespace name 'ReportExecutionService'
for both of the following lines:
RS2005.ReportingService2005 rs;
RE2005.ReportExecutionService rsExec;
As a follow up to my previous comment, the url has changed to the following for SQL 2008;
http://machine/Reportserver?/path/to/report&rs:Command=Render¶m1=paramValue&rs:Format=Pdf
This was a great post and very clear and concise. My only additional question would be setting parameters to pass in and how that would be done. I am going to play around with the solution a little and look at some other posts and hopefully I can just figure it out. SSRS and SSIS being used by other programs is like a black art I have found. There is not much documentation and little agreement on what to do. For that reason this post was a diamond in the rough to find.
Sanjay,This is a really great article.I created a parameted script to run 180 reports.It takes only 10 minutes to render and export all 180 reports.Thanks for sharing your knowledge.The only limitation is report won't show filter names and values.Is it a limition? Please let me know is there a way to include the info in the report.Thanks in advance.Uma
Hi Sandeep,
Basically i am trying to get report for particular snapshotID that i have created. For that i have used the above code. I am able to successfully create the report in PDF format. But it is generated when i pass null value in _historyid and historyid variable. if i pass snapshot id in the history id then it gives following exception
System.Web.Services.Protocols.SoapException: The parameter value provided for 'snapshotID' does not match the parameter type. ---> Microsoft.ReportingServices.Diagnostics.Utilities.ParameterTypeMismatchException: The parameter value provided for 'snapshotID' does not match the parameter type. ---> System.FormatException: String was not recognized as a valid DateTime.
at Microsoft.ReportingServices.WebServer.ReportExecution2005Impl.LoadReport(String Report, String HistoryID, ExecutionInfo2& executionInfo)
at Microsoft.ReportingServices.WebServer.ReportExecutionService.LoadReport(String Report, String HistoryID, ExecutionInfo& executionInfo)
Another thing i want to show the report in reportviewer how could i load this report in reportviewer.
Thanks in Advance
Something must have changed in SQL 2008; the only options available are
RS2005.ReportingService2005SoapClient rs;
RS2005.ReportingService2005Soap rs2;
RS2005.ReportingService2005SoapChannel rs3;
And none of them have the methods refer to.
Any idea what needs to be done?
Hi, Is it possible to auto-generate PDF say QUOTE report from CRM 2011 Online? If so, what are the steps. Thanks
hi
please can you give me ur mail id..
my mail id is indiradevit@clearpractice.com
please give me ur mail id
i got some problem
hi
i implemented this link.
but i got error.
“This report requires a default or user-defined value for the report parameter 'mgrid'. To run or subscribe to this report, you must provide a parameter value. ---> Microsoft.ReportingServices.Diagnostics.Utilities.ReportParameterValueNotSetException: This report requires a default or user-defined value for the report parameter 'mgrid'. To run or subscribe to this report, you must provide a parameter value.”
mgrid is one parameter value.
please tel me where can i did mistake.
You are the Best !! Thanks a lot for great article
Wow just what i was looking for. Thanks
Hi Sandeep
I’m recreating some crystal reports in SSRS 2008 We use a web service to convert Crystal reports to PDF files. The Crystal Reports in web service is using a dll named CRAXDRT. I want to modify the web service to convert SSRS Reports to PDF.
As well I want to attach to SSRS report excel file and after that convert to PDF
Any suggestions
Thanks a lot
Post a Comment