2013-07-23 50 views
1

我正在開發一個Windows應用程序,我在其中使用Crystal Report(我是Crystal報告的新手)我面臨的問題是當我在第一次加載時測試報告時它工作正常,但是當我嘗試刷新它提供的報告時我是數據庫登錄窗口,有沒有辦法阻止這個窗口?以及如何使用代碼設置報告的連接字符串?如何防止水晶報表中的數據庫登錄窗口?

注: 1 - 我想

private void crystalReportViewer1_ReportRefresh(object source, CrystalDecisions.Windows.Forms.ViewerEventArgs e) 
    { 
     Myreport.SetDatabaseLogon("username", "password", "server", "dbname", false); 
    } 

,但我仍然得到數據庫的登錄窗口。

2-I使用水晶報表拖放來創建我的報告。

3-這是一個windows應用程序和sql server 2008數據庫C#是編程語言。

應用程序中的4臺服務器可能會或可能不在同一臺計算機上。

回答

1

我有一個類似的問題。 SetDatabaseLogon函數不適用於我,因此我必須手動爲連接詳細信息分配給報表中的每個表。我認爲這個函數是針對SQL Server的(我使用的是Sybase ASE),但你可能會遇到和我一樣的問題。

ConnectionInfo connInfo = new ConnectionInfo(); 
connInfo.ServerName = "Driver={Adaptive Server Enterprise};Server=x.x.x.x;Port=x;"; 
connInfo.DatabaseName = "dbname"; 
connInfo.UserID = "username"; 
connInfo.Password = "password"; 

TableLogOnInfo tableLogOnInfo = new TableLogOnInfo(); 
tableLogOnInfo.ConnectionInfo = connInfo; 

foreach(Table table in reportDoc.Database.Tables) 
{ 
    table.ApplyLogOnInfo(tableLogOnInfo); 
    table.LogOnInfo.ConnectionInfo.ServerName = connInfo.ServerName; 
    table.LogOnInfo.ConnectionInfo.DatabaseName = connInfo.DatabaseName; 
    table.LogOnInfo.ConnectionInfo.UserID = connInfo.UserID; 
    table.LogOnInfo.ConnectionInfo.Password = connInfo.Password; 

    // Apply the schema name to the table's location 
    table.Location = "dbo." + table.Location; 
} 

顯然你connInfo.ServerName會有所不同,但我將我用別人堅持這個相同的問題,但在ASE模式。

希望這會有所幫助。

+0

感謝您的回答我會嘗試並告訴您它是否可以正常工作,再次感謝 – MinaG

+0

非常感謝您的部分工作,我的意思是它更改了服務器名稱和數據庫數據庫登錄窗口中的名稱,但窗口仍然是sh向上詢問密碼,是否有解決方案? – MinaG

+0

它現在工作,我忘了把它放在負載太這是問題非常感謝你:-D – MinaG

0

這聽起來像你正在關閉連接,然後當你刷新它不會重新打開連接...你可以發佈你的完整代碼來驗證?

+0

這是我在表格一切使用時只需將唯一的代碼和沒有任何代碼的代碼,它是一個表格,它包含一個水晶報表查看器和使用查看器的任務菜單綁定的報表,我沒有其他代碼,只是報告刷新了我提出的問題,而你的回答是合乎邏輯的,但我不要既不打開也不關閉連接,在此先感謝 – MinaG

1
private void button1_Click(object sender, EventArgs e) 
    { 
     DataTable dt = new DataTable(); 
     dt = selectallrecord(); 
     CrystalReport1 cr1 = new CrystalReport1(); 
     cr1.SetDataSource(dt); 
     crystalReportViewer1.ReportSource = cr1; 


    } 



    public DataTable selectallrecord() 
    { 
     Connection c = new Connection(); 
     //c.main(); 

     if (c.cn.State == ConnectionState.Open) 
     { 
      c.cn.Close(); 
      c.cn.Open(); 
     } 

     DataSet DS = new DataSet(); 
     string USER = ""; 
     USER = "SELECT * FROM StudentInfo"; 
     SqlDataAdapter DA = new SqlDataAdapter(USER, c.cn); 
     DA.Fill(DS); 
     DataTable DT = DS.Tables[0]; 
     return DT; 

    } 
+0

謝謝SumitG我得到它Zec答案工作正常,再次感謝 – MinaG

0

只是給您的數據庫憑據方法SetDatabaseLogon如下 Report.SetDatabaseLogon( 「」, 「XXX」)的Access數據庫

Report.SetDatabaseLogon( 「SA」, 「XXXXX」,」 ServerName「,」DatabaseName「)爲Sql服務器。

,但給踩線 Report.SetDataSource(DT)

0
TableLogOnInfos crtableLogoninfos = new TableLogOnInfos(); 
      TableLogOnInfo crtableLogoninfo = new TableLogOnInfo(); 
      ConnectionInfo crConnectionInfo = new ConnectionInfo(); 
      Tables CrTables; 
      SalesManVisit cryRpt = new SalesManVisit(); 

      crConnectionInfo.ServerName = @"TLPL_ICT_OPR\xxxxxxxxx"; 
      crConnectionInfo.DatabaseName = "xxxxxxx"; 

      crConnectionInfo.UserID = "xxxxx"; 
      crConnectionInfo.Password = "xxxxxx"; 



      CrTables = cryRpt.Database.Tables; 
      foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables) 
      { 
       crtableLogoninfo = CrTable.LogOnInfo; 
       crtableLogoninfo.ConnectionInfo = crConnectionInfo; 
       CrTable.ApplyLogOnInfo(crtableLogoninfo); 
      } 
      CrystalReportViewer1.ReportSource = cryRpt; 
      CrystalReportViewer1.RefreshReport(); 
      cryRpt.Refresh(); 
+0

任何解釋除了從代碼? – Ian

0

我的問題是由安裝SQL Server 2014客戶端工具的連接,並使用SQL Server安裝程序源向後客戶端連接組件後。

ASP下面的圖片.........只安裝客戶端工具連接不完整的SQL Server數據庫... enter image description here