次のコードのいずれかを使用して、実行時にデータベースをCrystal Reportに接続しますが、ポストバックでデータベース接続が失われます(ツリービューをクリックするか、次のページに移動しようとすると)、これは取得したエラーです:
System.Runtime.InteropServices。 COMException:データベースのログオンに失敗しました。
ReportDocument cryRpt = new ReportDocument();
cryRpt.Load(path);
(((1)))
for (int i = 0; i < cryRpt.DataSourceConnections.Count; i++)
cryRpt.DataSourceConnections[i].SetConnection(ServerName, DatabaseName, UserID, Password);
for (int i = 0; i < cryRpt.Subreports.Count; i++)
for (int j = 0; j < cryRpt.Subreports[i].DataSourceConnections.Count; j++)
cryRpt.OpenSubreport(cryRpt.Subreports[i].Name).DataSourceConnections[j].SetConnection(ServerName, DatabaseName, UserID, Password);
cryRpt.OpenSubreport(cryRpt.Subreports[i].Name).DataSourceConnections[j].SetConnection(ServerName, DatabaseName, UserID, Password);
(((2)))
crConnectionInfo.ServerName = ServerName;
crConnectionInfo.DatabaseName = DatabaseName;
crConnectionInfo.UserID = UserID;
crConnectionInfo.Password = Password;
crDatabase = cryRpt.Database;
crTables = crDatabase.Tables;
for (int i = 0; i < crTables.Count; i++)
{
crTable = crTables[i];
crTableLogOnInfo = crTable.LogOnInfo;
crTableLogOnInfo.ConnectionInfo = crConnectionInfo;
crTable.ApplyLogOnInfo(crTableLogOnInfo);
//crTable.Location = crConnectionInfo.DatabaseName + ".dbo." + crTable.Location.Substring(crTable.Location.LastIndexOf(".") + 1)
}