У меня есть многочисленные отчеты, которые ранее извлекали данные из источника ODB C в устаревшем настольном приложении. Сейчас я пытаюсь заполнить эти отчеты в службе C#. net, загрузив данные в DataTable.
Код отлично работает в приложении windows, но не в службе.
Я попытался скомпилировать как x86, так и x64 для службы, а также запустить службу так же пользователь, который используется для запуска настольного приложения.
Фрагмент:
ReportDocument rd = new ReportDocument();
StreamReader sr = new StreamReader(@"C:\infile.txt");
DataTable dt = new DataTable("REPORTTABLE");
string[] columnNames = new string[3];
columnNames[0] = "COL1";
columnNames[1] = "COL2";
columnNames[2] = "COL3";
foreach (string colName in columnNames)
{
dt.Columns.Add(colName);
}
int i = 0;
DataRow dr;
string[] fields = new string[3];
while (!sr.EndOfStream)
{
fields[i] = sr.ReadLine();
i++;
}
dt.Rows.Add(fields);
sr.Close();
rd.Load(@"C:\report.rpt");
rd.SetDataSource(dt);
Исключение выдается в SetDataSource (). Имена столбцов и таблицы данных совпадают с теми, что были проверены ранее с источником данных ODB C. Входными данными является строка на столбец в текстовом файле, например
data1 data2 data3
Исходная ошибка:
Error in File marriage 18884_5280_{F58B98C0-1D10-462C-98F8-88974D74BFF8}.rpt:
Failed to load database information.
Трассировка стека:
at CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(Exception e)
at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSourceInternal(Object val, Type type)
at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSource(DataSet dataSet)
at WindowsService1.Service1.OnTimer(Object sender, ElapsedEventArgs args) in C:\Users\himik\source\repos\WindowsService1\WindowsService1\Service1.cs:line 432
Заранее спасибо.