これについて多くのスレッドを見つけたので、これに問題があることは知っていますが、何もうまくいかず、夢中になっています!
レポートを生成するときにログオン情報を変更する必要があります。ただし、ApplyLogOnInfo メソッドは常に不良データを返します。ODBC MySQL データベースに接続しようとしています。
これが私のコードです:
ReportDocument myReport = new ReportDocument();
myReport.Load("myReportPath");
ParameterField myParamFieldId = myReport.ParameterFields["param1"];
ParameterDiscreteValue param = new ParameterDiscreteValue();
param.Value = "param1";
myParamFieldId.CurrentValues.Add(param);
ParameterField myParamFieldNumRevision = myReport.ParameterFields["param2"];
ParameterDiscreteValue paramNumRevision = new ParameterDiscreteValue();
param.Value = "param2";
myParamFieldNumRevision.CurrentValues.Add(param);
ApplyLogOnInfo(myReport);
try
{
myReport.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, "Rapport");
myReport.Close();
}
catch (Exception ex)
{
throw ex;
}
finally
{
myReport.Dispose();
}
private void ApplyLogOnInfo(ReportDocument rpt)
{
ConnectionInfo connInfo = new ConnectionInfo();
connInfo.ServerName = "test";
connInfo.DatabaseName = "test";
connInfo.UserID = "test";
connInfo.Password = "test";
connInfo.Type = ConnectionInfoType.CRQE;
connInfo.IntegratedSecurity = false;
foreach (CrystalDecisions.CrystalReports.Engine.Table table in rpt.Database.Tables)
{
TableLogOnInfo logonInfo = table.LogOnInfo;
logonInfo.ConnectionInfo = connInfo;
table.ApplyLogOnInfo(logonInfo); // Here, old values are brought back
}
// Idem on Sub-reports
foreach (ReportDocument sousRpt in rpt.Subreports)
{
ReportDocument rptSub = rpt.OpenSubreport(sousRpt.Name);
foreach (CrystalDecisions.CrystalReports.Engine.Table table in rptSub.Database.Tables)
{
TableLogOnInfo logonInfo = table.LogOnInfo;
logonInfo.ConnectionInfo = connInfo;
table.ApplyLogOnInfo(logonInfo);
}
}
}
これは、サブレポートとパラメーターが原因である可能性があることがわかりました。これを機能させる方法はありません。
私も試しました:
rpt.DataSourceConnections[0].SetConnection("test", "test", "test", "test");
// But DataSourceConnections[0].Attributes and DataSourceConnections[0].LogonProperties still store values from the old connection, and doesn't work. I tried to clear it does'nt apply.
// I tried to pass parameters like this
myReport.SetParameterValue("param1", "test");
myReport.SetParameterValue("param1", "test");
// I tried with dataset and fill method
さて、私は立ち往生しており、本当にあなたの助けが必要です!! ありがとう