2016-02-12 55 views
0

我得到了使用ODBC連接實現的水晶報表。但根據我的要求,我改變了SQL連接。水晶報表出現錯誤'已打開連接'

private void generateReport(string path) 
{ 
    string ServerName = ConfigurationManager.AppSettings["Server"].ToString(); 
    string DatabaseName = ConfigurationManager.AppSettings["DBName"].ToString(); 
    string UserName = ConfigurationManager.AppSettings["UserName"].ToString(); 
    string Password = ConfigurationManager.AppSettings["Password"].ToString(); 

    CrystalReportViewer1.ParameterFieldInfo.Clear(); 

    ReportDocument crystalReport = new ReportDocument(); 
    crystalReport.Load(path); 

    var connectionInfo = new ConnectionInfo(); 
    connectionInfo.ServerName = ServerName; 
    connectionInfo.DatabaseName = DatabaseName; 
    connectionInfo.UserID = UserName; 
    connectionInfo.Password = Password;    
    connectionInfo.IntegratedSecurity = false; 

    crystalReport.SetDatabaseLogon(UserName, Password, ServerName, DatabaseName); 
    Tables CrTables = crystalReport.Database.Tables; 
    TableLogOnInfo crtableLogoninfo = new TableLogOnInfo(); 
    foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables) 
    {        
     crtableLogoninfo = CrTable.LogOnInfo; 
     crtableLogoninfo.ConnectionInfo = connectionInfo; 
     CrTable.ApplyLogOnInfo(crtableLogoninfo); 
     CrystalReportViewer1.LogOnInfo.Add(crtableLogoninfo); 

    } 

    foreach (ReportDocument report in crystalReport.Subreports) 
    { 
     report.SetDatabaseLogon(UserName, Password, ServerName, DatabaseName); 
     foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in report.Database.Tables) 
     { 
      crtableLogoninfo = CrTable.LogOnInfo; 
      crtableLogoninfo.ConnectionInfo = connectionInfo; 
      CrTable.ApplyLogOnInfo(crtableLogoninfo); 
      CrystalReportViewer1.LogOnInfo.Add(crtableLogoninfo); 
     } 
    } 

    DataTable DTpram = dbAccess.getDataTableBtQry("select ParamID,ControllerType,ParamName from MI_CrystalReport_Parameters where ReportID=" + ddlReport.SelectedValue); 
    for (int i = 0; i < DTpram.Rows.Count; i++) 
    { 
      try 
      { 
       string parm = DTpram.Rows[i]["ParamName"].ToString().ToLower(); 
       string value = getControllerValue(DTpram.Rows[i]["ParamID"].ToString().ToLower(), DTpram.Rows[i]["ControllerType"].ToString().ToLower()); 

       ParameterField parameter = new ParameterField(); 
       ParameterDiscreteValue parameterValue = new ParameterDiscreteValue(); 
       parameterValue.Value = value; 
       parameter.Name = parm; 
       parameter.CurrentValues.Add(parameterValue); 
       CrystalReportViewer1.ParameterFieldInfo.Add(parameter); 
      } 
      catch 
      { 
      } 
     } 

     CrystalReportViewer1.ReportSource = crystalReport; 
     CrystalReportViewer1.RefreshReport(); 
} 

但是,當我檢查它得到像這樣的錯誤。 Print Screen

回答