Невозможно установить параметры служб отчетов - PullRequest
0 голосов
/ 22 марта 2012

Я создаю отчет служб отчетов из приложения на основе ASP.NET (MVC), но у меня возникают проблемы при настройке параметров отчета.

Я считаю, что проблема возникла только после того, как мы обновили SQL Serverс 2005 по 2008 R2 (и службы Reporting Services вместе с ним).

Первоначальная ошибка, возникшая при вызове rsExec.Render:

Процедура или функция pCommunication_ReturnRegistrationLetterDetails 'ожидает параметр' @guid ', который не был предоставлен.

Отладка кода Я заметил, что rsExec.SetExecutionParameters возвращает следующий ответ:

Невозможно вызвать' NameOfApp.SQLRSExec.ReportExecutionService.SetExecutionParameters (NameOfApp.SQLRSExec.ParameterValue [], string) ', потому что это веб-метод.

Вот функция целиком:

public static bool ProduceReportToFile(string reportname, string filename, string[,] reportparams, 
    string fileformat)
{
    bool successful = false;
    SQLRS.ReportingService2005 rs = new SQLRS.ReportingService2005();
    SQLRSExec.ReportExecutionService rsExec = new NameOfApp.SQLRSExec.ReportExecutionService();

    rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
    rsExec.Credentials = System.Net.CredentialCache.DefaultCredentials;

    // Prepare Render arguments
    string historyID = null;
    string deviceInfo = null;

    // Prepare format - available options are "PDF","Word","CSV","TIFF","XML","EXCEL" 
    string format = fileformat;

    Byte[] results;
    string encoding = String.Empty;
    string mimeType = String.Empty;
    string extension = String.Empty;

    SQLRSExec.Warning[] warnings = null;
    string[] streamIDs = null;

    // Define variables needed for GetParameters() method
    // Get the report name
    string _reportName = reportname;
    string _historyID = null;
    bool _forRendering = false;
    SQLRS.ParameterValue[] _values = null;
    SQLRS.DataSourceCredentials[] _credentials = null;
    SQLRS.ReportParameter[] _parameters = null;

    // Get if any parameters needed.
    _parameters = rs.GetReportParameters(_reportName, _historyID,
                    _forRendering, _values, _credentials);

    // Load the selected report.
    SQLRSExec.ExecutionInfo ei =
            rsExec.LoadReport(_reportName, historyID);

    // Prepare report parameter.
    // Set the parameters for the report needed.
    SQLRSExec.ParameterValue[] parameters =
            new SQLRSExec.ParameterValue[1];

    // Place to include the parameter.
    if (_parameters.Length > 0)
    {
        for (int i = 0; i < _parameters.Length; i++)
        {
            parameters[i] = new SQLRSExec.ParameterValue();
            parameters[i].Label = reportparams[i,0];
            parameters[i].Name = reportparams[i, 0];
            parameters[i].Value = reportparams[i, 1];
        }
    }
    rsExec.SetExecutionParameters(parameters, "en-us");
    results = rsExec.Render(format, deviceInfo,
                out extension, out encoding,
                out mimeType, out warnings, out streamIDs);

    // Create a file stream and write the report to it
    using (FileStream stream = System.IO.File.OpenWrite(filename))
    {
        stream.Write(results, 0, results.Length);
    }
    successful = true;

    return successful;
}

Любые идеи, почему яТеперь я не могу установить параметры?Генерация отчета работает без проблем, если параметры не требуются.

Ответы [ 2 ]

0 голосов
/ 09 марта 2014

Параметр _reportName не может быть нулевым или пустым. API отражения [CLASSNAME].[METHODNAME]() не удалось создать и вернуть объект SrsReportNameAttribute

В данном конкретном случае похоже, что предыдущая полная компиляция не завершилась.

Если вы столкнулись с этой проблемой, я бы предложил сначала скомпилировать класс, упомянутый в сообщении об ошибке, и посмотреть, решит ли это проблему.

  1. перейти к AOT (получить Ctrl + D)

  2. в классах найти CLASSNAME

3.компилировать (F7)

0 голосов
/ 03 апреля 2012

Похоже, что это может быть проблема с тем, как службы отчетов передают параметры в хранимую процедуру, предоставляющую данные. В отчет была передана строковая привязка, и хранимая процедура ожидала указателя varchar. Я подозреваю, что службы отчетов, возможно, заметили, что строка соответствует шаблону формата guid, и поэтому передали ее как уникальный идентификатор хранимой процедуры.

Я изменил источник данных для отчета с «хранимой процедуры» на «текст» и установил SQL как «EXEC pMyStoredOProcName @guid».

Обратите внимание, что guid, передаваемый в виде строки в хранимую процедуру, вероятно, не лучшая практика ... Я просто отлаживал проблему с кодом другого разработчика.

...