【发布时间】:2015-04-13 09:35:38
【问题描述】:
尝试在运行时更改我的数据源时出现错误“登录失败”。我已经搜索了 SO 和 SAP 站点,并将下面的代码放在一起,但我仍然收到错误消息。我的访问数据库是 2013 年,没有密码保护,我使用的是默认的“管理员”用户。该报表有一个 OLE DB 连接。我的代码循环遍历所有表,包括子报表并更改登录名,我还更改了数据库登录名。非常感谢任何帮助:
public void RunTestReport()
{
DataSet testDataSet = new DL.NonConformance().GetNonConformances(1, "NonConformance");
var rpt = new ReportDocument();
rpt.Load(@"C:\Reports\rptTest.rpt");
SetCrystalLogin(rpt);
rpt.SetDataSource(testDataSet);
crystalReportViewer1.ReportSource = rpt;
crystalReportViewer1.Refresh();
}
public void SetCrystalLogin(ReportDocument oRpt)
{
ConnectionInfo oConnectInfo = new ConnectionInfo();
string dbpath = string.Concat(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), @"\db\dbacc.db");
oConnectInfo.ServerName = dbpath;
oConnectInfo.DatabaseName = string.Empty;
oConnectInfo.UserID = "Admin";
oConnectInfo.Password = string.Empty;
// Set the logon credentials for all tables
SetCrystalTablesLogin(oConnectInfo, oRpt.Database.Tables);
// Check for subreports
foreach (CrystalDecisions.CrystalReports.Engine.Section oSection in oRpt.ReportDefinition.Sections)
{
foreach (CrystalDecisions.CrystalReports.Engine.ReportObject oRptObj in oSection.ReportObjects)
{
if (oRptObj.Kind == CrystalDecisions.Shared.ReportObjectKind.SubreportObject)
{
// This is a subreport so set the logon credentials for this report's tables
CrystalDecisions.CrystalReports.Engine.SubreportObject oSubRptObj = oRptObj as CrystalDecisions.CrystalReports.Engine.SubreportObject;
// Open the subreport
CrystalDecisions.CrystalReports.Engine.ReportDocument oSubRpt = oSubRptObj.OpenSubreport(oSubRptObj.SubreportName);
SetCrystalTablesLogin(oConnectInfo, oSubRpt.Database.Tables);
}
}
}
oRpt.Refresh();
oRpt.SetDatabaseLogon("Admin", string.Empty, dbpath, string.Empty, true);
oRpt.VerifyDatabase();
oRpt.Refresh();
}
private void SetCrystalTablesLogin(CrystalDecisions.Shared.ConnectionInfo oConnectInfo, Tables oTables)
{
foreach (CrystalDecisions.CrystalReports.Engine.Table oTable in oTables)
{
CrystalDecisions.Shared.TableLogOnInfo oLogonInfo = oTable.LogOnInfo;
oLogonInfo.ConnectionInfo = oConnectInfo;
oTable.ApplyLogOnInfo(oLogonInfo);
}
}
【问题讨论】:
标签: c# winforms ms-access crystal-reports