2011-07-21 10 views
0

レポートと同じコードを使用してレポートデータソースを設定し、5つのレポートが機能し、本番環境を指すことができる8つのレポートがあります。残りの3つのレポートでは、データベースの検証とデータベースの更新を実行して再実行しましたが、これらのレポートを実稼働環境で実行すると、DEV環境からデータが戻されます。Crystal Report datsource ConnectionInfoで設定されていません - 正しいデータベースに接続しません。

私のデータソースがどのように設定されているかは次のとおりです。 私は8つの水晶レポートのすべてでストアドプロシージャを呼び出します。 非常に詳細なデバッグを行い、データソースデータが正しい情報を取得していないことを確認しました。

  string database = ConfigurationManager.AppSettings[env + "Database"].ToString(); 
      string server = ConfigurationManager.AppSettings[env + "Server"].ToString(); 


      CrystalReportViewer1.ParameterFieldInfo = fields; 
      rptDoc.Load(Server.MapPath(report)); 


      ConnectionInfo connectionInfo = Reports.GetConnectionInfo(server, database, "userID", "password"); 


      //connectionInfo.Attributes = attributes; 
      connectionInfo.Type = ConnectionInfoType.SQL; 
      SetDBLogonForReport(connectionInfo, env); 
      CrystalReportViewer1.ReportSource = rptDoc; 



private void SetDBLogonForReport(ConnectionInfo oConnectionInfo, string env) 
    { 
     try 
     { 
      TableLogOnInfos oTableLogOnInfos = CrystalReportViewer1.LogOnInfo; 
      string[] sparams = new string[]{ 
      }; 

      foreach (CrystalDecisions.CrystalReports.Engine.Table oTable in rptDoc.Database.Tables) 
      { 
       if (oTable.LogOnInfo.ConnectionInfo.ServerName == oConnectionInfo.ServerName) 
       { 
        TableLogOnInfo oTableLogOnInfo = oTable.LogOnInfo; 

        oTableLogOnInfo.ConnectionInfo = oConnectionInfo; 

        oTable.ApplyLogOnInfo(oTableLogOnInfo); 

        // oTable.Location = String.Format("{0}.dbo.{1}", oConnectionInfo.DatabaseName, oTable.Name); 

        bool b = oTable.TestConnectivity(); 

        if (!b) 
        { 
         invokeErrorLogger(sparams, env); 
        } 
       } 
      } 

     } 
     catch 
     { 
      throw; 
     } 
    } 

答えて

1

すでに動作しているレポートは、プロダクトサーバーを指しています。レポートに格納されているサーバーが、設定しようとしているサーバー名と一致する場合のみ、ログオン資格情報を適用します。次のように変更してください。

// Clear existing connection info first 
rptDoc.DataSourceConnections.Clear(); 

foreach (CrystalDecisions.CrystalReports.Engine.Table oTable in rptDoc.Database.Tables) 
{ 
    var oTableLogonInfo = oTable.LogonInfo; 
    oTableLogonInfo.ConnectionInfo = oConnectionInfo; 
    oTable.ApplyLogOnInfo(oTableLogonInfo); 
    bool b = oTable.TestConnectivity(); 
    if (!b) 
    { 
     invokeErrorLogger(sparams, env); 
    } 
} 
関連する問題