Пожалуйста, посмотрите на следующую строку кода:
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