Как программно передать параметры в отчет SSRS

Мне нужна небольшая помощь по программной передаче параметров в отчет SSRS через VB.NET и ASP.NET. Кажется, это должно быть относительно просто, но мне не очень повезло, и я нашел помощь по этому вопросу.

Кто-нибудь есть какие-либо предложения о том, куда обратиться за помощью, или, возможно, даже какой-то пример кода?

Спасибо.

15.12.2008 15:47:31
4 ОТВЕТА
РЕШЕНИЕ

Вы можете сделать следующее: (он работает как для локальных отчетов, так и для полнофункциональных отчетов SSRS. Но в полном режиме используйте соответствующий класс, часть параметров остается той же)

LocalReport myReport = new LocalReport();
myReport.ReportPath = Server.MapPath("~/Path/To/Report.rdlc");

ReportParameter myParam = new ReportParameter("ParamName", "ParamValue");
myReport.SetParameters(new ReportParameter[] { myParam });

// more code here to render report
15
24.02.2015 15:21:25
Что делать, если я не использую локальные отчеты, но не хочу оставлять явные значения в URL?
Leonardo 24.02.2015 14:20:46

Если сервер отчетов доступен напрямую, вы можете передать параметры в строке запросов, если вы обращаетесь к отчету с помощью URL:

Http: // MyServer / ReportServer / MyReport & RS: Command = Рендер & Param1 = 54321 & Param2 = продукт

Вы можете добавить форматирование вывода, добавив следующее в конце URL:

& RS: Формат = Excel

или

& RS: Формат = PDF

11
15.12.2008 16:03:59
Передача параметров в виде URL-адреса, похоже, открывает возможность взломать ваш отчет. Это может быть хорошо для внутреннего сайта, но, вероятно, не для публичного сайта.
LunaCrescens 6.07.2009 20:59:12

Прошло много времени с тех пор, как я написал этот код, но он может помочь: ваш веб-проект должен быть веб-сайтом, а не проектом типа «ASP.Net Web Application», иначе вы не сможете добавить ссылку упомянуто ниже. Щелкните правой кнопкой мыши по проекту и добавьте папку ASP.Net - App_WebReferences. Вам нужно будет указать сервер, где находится ваш SRS; выберите .asmx. После добавления папка на этом уровне называется RSService, а под ней находятся 2 вещи: reportservice.discomap & .wsdl. В моем VB я делаю Импортирует RSService и Импортирует System.Web.Services.Protocols, затем ...

Dim MyRS As New ReportingService

Служба отчетов находится на другом сервере, чем веб-сервер, на котором работает приложение, поэтому я не могу сделать следующее: MyRS.Credentials = System.Net.CredentialCache.DefaultCredentials

Вместо этого:, MyRS.Credentials = New System.Net.NetworkCredential(rs1, rs2, rs3)где rs1 / 2/3 - это поле для входа в систему SRS, поле для пароля в поле SRS и имя домена ». (Они зашифрованы в моем файле web.config.)

Затем масс-паста:

MyRS.Credentials = New System.Net.NetworkCredential(rs1, rs2, rs3)

Dim ReportByteArray As Byte() = Nothing
Dim ReportPath As String = "/SRSSiteSubFolder/ReportNameWithoutRDLExtension"
Dim ReportFormat As String = "PDF"
Dim HistoryID As String = Nothing
Dim DevInfo As String = "<DeviceInfo><Toolbar>False</Toolbar></DeviceInfo>"
'Dim x As ReportParameter - not necessary
Dim ReportParams(0) As ParameterValue
ReportParams(0) = New ParameterValue()
ReportParams(0).Name = "TheParamName"
ReportParams(0).Value = WhateverValue

Dim Credentials As DataSourceCredentials() = Nothing
Dim ShowHideToggle As String = Nothing
Dim Encoding As String
Dim MimeType As String
Dim ReportHistoryParameters As ParameterValue() = Nothing
Dim Warnings As Warning() = Nothing
Dim StreamIDs As String() = Nothing
'Dim sh As New SessionHeader() - not necessary
''MyRS.SessionHeaderValue = sh - not necessary

ReportByteArray = MyRS.Render(ReportPath, ReportFormat, HistoryID, DevInfo, ReportParams, Credentials, _
    ShowHideToggle, Encoding, MimeType, ReportHistoryParameters, Warnings, StreamIDs)
'(Yay! That line was giving "HTTP error 401 - Unauthorized", until I set the credentials
' as above, as explained by http://www.odetocode.com/Articles/216.aspx.)

'Write the contents of the report to a PDF file:
Dim fs As FileStream = File.Create(FullReportPath, ReportByteArray.Length)
fs.Write(ReportByteArray, 0, ReportByteArray.Length)
fs.Close()

Call EmailTheReport(FullReportPath)

If IO.File.Exists(FullReportPath) Then
    IO.File.Delete(FullReportPath)
End If
1
5.06.2011 18:47:33
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.Reset();
Label1.Visible = false;
ReportViewer1.Visible = true;
DataSet dataSet = new DataSet();
dataSet = new ClassBLL().Load_Report_Detail(TextBox1.Text, 
ddlType.SelectedValue, levelcode, fields);
ReportDataSource datasource = new ReportDataSource("DataSet_StoreprocedureName",
dataSet.Tables[0]);

if (dataSet.Tables[0].Rows.Count == 0)
{
    ReportViewer1.Visible = false;
}

ReportViewer1.LocalReport.ReportPath = Server.MapPath("") + @"\Report.rdlc";
ReportViewer1.LocalReport.DataSources.Clear();
ReportViewer1.LocalReport.DataSources.Add(datasource);
string fields="name,girish,Z0117";
string[] filedName = fields.Split(',');
ReportParameter[] param = new ReportParameter[2];

//for (int i = 0; i < filedName.Length; i++)
//{

param[0] = new ReportParameter(filedName[0], filedName[0], true);
param[1] = new ReportParameter(filedName[3], filedName[3], true);

// }


ReportViewer1.LocalReport.SetParameters(param);

ReportViewer1.ServerReport.Refresh();
1
10.06.2012 03:35:39
Вопрос специально просит VB, вы предлагали C #.
PoloHoleSet 5.12.2019 20:18:08