我创建了显示我的报告的方法,然后我在运行时提供了连接信息,但是当我连接到远程服务器时出现错误
public bool ShowReport()
{
try
{
//CrystalDecisions.CrystalReports.Engine.ReportDocument oRepDoc;
//CrystalDecisions.Shared.TableLogOnInfo oLogInfo;
//CrystalDecisions.CrystalReports.Engine.Table oTable;
//CrystalDecisions.CrystalReports.Engine.FieldDefinition oField;
//CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinition oParamFieldDef;
//CrystalDecisions.Shared.ParameterValues oParamValues;
//CrystalDecisions.Shared.ParameterDiscreteValue oDiscretParamValue;
//ParameterFields oParamList;
//ParameterField oParamItem;
if (!System.IO.File.Exists(ReportPath))
{
MessageBox.Show("ملف التقرير غير موجود فى المسار الصحيح", MainClass.ApplicationName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
}
else
{
oRepDoc = new ReportDocument();
oLogInfo = new TableLogOnInfo();
Tables t;
oRepDoc.Load(ReportPath, OpenReportMethod.OpenReportByTempCopy);
//***********************************************************************************
ConnectionInfo connection = new ConnectionInfo();
if (MainClass.IntegratedSecurity) connection.IntegratedSecurity = true;
else
{
connection.IntegratedSecurity = false;
connection.UserID = MainClass.UserId;
connection.Password = MainClass.Password;
}
connection.ServerName = MainClass.ServerName;
connection.DatabaseName = MainClass.DatabaseName;
t= oRepDoc.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table oTab in t)
{
oLogInfo = oTab.LogOnInfo;
oLogInfo.ConnectionInfo = connection;
oTab.ApplyLogOnInfo(oLogInfo);
//oLogInfo = null;
}
//***********************************************************************************
oRepDoc.Refresh();
oRepDoc.VerifyDatabase(); // Very Important Line
//***********************************************************************************
// First Way To Pass Report Parameters Value
foreach (Range oRange in oRangeList)
{
oRepDoc.SetParameterValue(oRange.RangeName, oRange.RangeValue);
}
oRangeList.Clear();
//***********************************************************************************
// Second Way To Pass Report Parameters Value
//ParameterValues oCurrentParameterValues;
//ParameterDiscreteValue oParameterDiscreteValue;
//CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinitions oParameterFieldDefinitions = oRepDoc.DataDefinition.ParameterFields;
//foreach (Range oRange in oRangeList)
//{
// oCurrentParameterValues = new ParameterValues();
// oParameterDiscreteValue = new ParameterDiscreteValue();
// oParameterDiscreteValue.Value = oRange.RangeValue;
// oCurrentParameterValues.Add(oParameterDiscreteValue);
// ParameterFieldDefinition oParameterFieldDefinition = oParameterFieldDefinitions[oRange.RangeName];
// oParameterFieldDefinition.ApplyCurrentValues(oCurrentParameterValues);
//}
//oRangeList.Clear();
//***********************************************************************************
// Pass "Company Name" And "Telephone" And "Printed By" To Report
FormulaFieldDefinition oFormulaFieldDefinition;
FormulaFieldDefinitions oFormulaFieldDefinitions = oRepDoc.DataDefinition.FormulaFields;
oFormulaFieldDefinition = oFormulaFieldDefinitions["For_CompanyName"];
oFormulaFieldDefinition.Text = string.Format("\"{0}\"", MainClass.CompanyName);
oFormulaFieldDefinition = oFormulaFieldDefinitions["For_CompanyTel"];
oFormulaFieldDefinition.Text = string.Format("\"{0}\"", MainClass.CompanyTel);
oFormulaFieldDefinition = oFormulaFieldDefinitions["For_PrintedBy"];
oFormulaFieldDefinition.Text = string.Format("\"{0}\"", MainClass.GetUserName(MainClass.SystemUserId));
//***********************************************************************************
}
if (Destination == ReportDestination.Printer)
{
oRepDoc.PrintOptions.PrinterName = PrinterName;
oRepDoc.PrintToPrinter(NumberofCopies, Collate, StartPage, EndPage);
return true;
}
return true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, MainClass.ApplicationName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
}
}
调试 oRepDoc.VerifyDatabase() 时;通过 connectioninfo 在 sql server 上的工作方式,我得到错误无效映射