Значение не может быть нулевым.Имя параметра: байт - PullRequest
0 голосов
/ 25 апреля 2019

Пожалуйста, посмотрите на следующую строку кода:

export.file = rv.LocalReport.Render(extension, deviceinfo, out mimetype, out encoding, 
    out extension, out stream, out wrn);

Поток всегда становится нулевым, вызывая ошибку «Параметр не может быть нулевым». Ниже мой фактический код:

public Export_Info create_export(string procedure, List<SqlParameter> parameter, 
    int export_type, string rdlc_path = "")
{
    Export_Info export = new Export_Info();
    ReportViewer rv = new ReportViewer();
    ReportViewer rvlabel = new ReportViewer();

    string[] stream = null;
    Microsoft.Reporting.WebForms.Warning[] wrn;
    byte[] result = null;
    string mimetype = null;
    string encoding;
    string extension = ex.get_Export_Value(export_type);
    string deviceinfo = null;

    DataReturn dr = dtran.GetTransaction(procedure, parameter);

    rv.LocalReport.ReportPath = rdlc_path;
    rv.LocalReport.DataSources.Clear();

    if (dr.Data.Tables.Count >= 1)
    {
        int tbl = 0;
        foreach(DataTable t in dr.Data.Tables)
        {
            string n = "";
            if (tbl == 0)
            {
                n = "Main";
            }
            else
            {
                n = "Main_" + tbl.ToString();
            }
            rv.LocalReport.DataSources.Add(new ReportDataSource(n, t));
            tbl++;
        }
    }

    try
    {
        export.file = rv.LocalReport.Render(extension, deviceinfo, out mimetype, 
            out encoding, out extension, out stream, out wrn);
    }
    catch (Exception err)
    {
        string filePath = @"C:\Error.txt";

        using (StreamWriter writer = new StreamWriter(filePath, true))
        {
            writer.WriteLine("Message :" + err.Message + "<br/>" + Environment.NewLine + 
                "StackTrace :" + err.StackTrace + "" + Environment.NewLine + 
                "Date :" + DateTime.Now.ToString());

            writer.WriteLine(Environment.NewLine + "--------------------------------" + 
                "---------------------------------------------" + Environment.NewLine);
        }
    }

    //export.label = rvlabel.LocalReport.Render(extension, deviceinfo, out mimetype, 
    //    out encoding, out extension, out stream, out wrn);

    return export;
}

Моя хранимая процедура возвращает значения правильно. Но переменная «Поток» все еще остается пустой. Любая помощь, чтобы исправить это?

Обновление: добавление сообщения трассировки стека ниже:

Сообщение: во время локальной обработки отчета произошла ошибка.
StackTrace: at
Microsoft.Reporting.WebForms.LocalReport.InternalRender (строковый формат, логический allowInternalRenderers, строковое deviceInfo, PageCountMode pageCountMode, CreateAndRegisterStream createStreamCallback, предупреждение [] и предупреждения)
в Microsoft.Reporting.WebForms.LocalReport.InternalRender (строковый формат, логический allowInternalRenderers, строковое deviceInfo, PageCountMode pageCountMode, String & mimeType, String & encoding, String & fileNameExtension, String [] & streams, Warning [] & warning)
в Microsoft.Reporting.WebForms.LocalReport.Render (строковый формат, строковое DeviceInfo, PageCountMode pageCountMode, String & mimeType, String & encoding, String & fileNameExtension, String [] & streams, Warning [] & warning)
в Microsoft.Reporting.WebForms.Report.Render (строковый формат, строковое DeviceInfo, строковое & mimeType, строковое и кодирование, строковое & fileNameExtension, строковое [] & потоки, предупреждение [] и предупреждения)
в Proj.export (Строковая процедура, параметр List'1, Int32 export_type, String rdlc_path) в C: \ Proj \ Controllers \ Export.cs: строка 75

...