2010-01-15 54 views
5

如何更改Crystal報表在運行時使用的數據源(數據庫服務器,用戶名,密碼),在Crystal服務器中運行?通過Crystal Web Services以編程方式爲Crystal Server上的Crystal報表設置數據源

我有一個水晶服務器,並上傳了具有設置數據源的報告(在SERVER A,userA,passwordA上託管SQL Server 2005)。我想安排報告從我寫的c#客戶機上使用不同的數據源(SERVER B上託管的SQL Server 2005,userB,passwordB)運行。

c#客戶端可以使用crystal webservices提供的對象安排報表在服務器內運行。 我一直在使用以下3個對象:

BIPlatform 
InfoObject 
CrystalReport 

對這些對象的文檔,可以發現HERE

+0

你的文檔鏈接指向JA VA文檔,但你標籤爲C#問題的問題? – 2010-01-26 20:31:54

回答

0

你應該儘量獲取有關ConnectionInfo Class


CrystalDecisions.Shared.ConnectionInfo myConnectionInfo = 
       new CrystalDecisions.Shared.ConnectionInfo(); 

myConnectionInfo.DatabaseName = "Database"; 
myConnectionInfo.UserID = "Username"; 
myConnectionInfo.Password = "[email protected]"; 

Programmatically Change a Crystal Reports datasource location一些信息 - 在VB但你可以使用在線翻譯工具之一從VB轉換到C#:

http://www.developerfusion.com/tools/convert/vb-to-csharp/ http://www.carlosag.net/Tools/CodeTranslator/
http://converter.telerik.com/

+0

CrystalInfo類未由Crystal Web服務公開。它是包含在程序集CrystalDecisions.Shared.dll中的類。我需要一個使用Web服務對象的解決方案,因爲我相信這是我可以與Crystal Web Server上託管的報表交互的唯一方式。 – argyle 2010-01-27 20:50:28

4

2018年1月30日 - 只是想補充一點,你將需要CrystalDecisions.ReportAppServer.DataDefModel DLL

我有同樣的問題,在這裏我有一個具有MSACCESS報告數據庫連接,我需要改變,要SQLServer的,它花了2天時間想出解決辦法:

  reportDocument = new ReportDocument(); 
      reportDocument.Load(reportFileName); 
      TableLogOnInfo tableLogOnInfo = ReportClass.GetSQLTableLogOnInfo(connectionProperties.DatabaseSource, connectionProperties.DatabaseName, connectionProperties.UserName, connectionProperties.Password); 
      for (int i = 0; i < reportDocument.Database.Tables.Count; i++) 
      { 
       Table table = reportDocument.Database.Tables[i]; 
       table.ApplyLogOnInfo(tableLogOnInfo); 
      } 

    public static ConnectionInfo GetConnectionInfo(string serverName, string   databaseName, string userID, string password) 
    { 
     ConnectionInfo connectionInfo = new ConnectionInfo(); 
     connectionInfo.ServerName = serverName; 
     connectionInfo.DatabaseName = databaseName; 
     connectionInfo.UserID = userID; 
     connectionInfo.Password = password; 
     return connectionInfo; 
    } 

    public static TableLogOnInfo GetSQLTableLogOnInfo(string serverName, string databaseName, string userID, string password) 
    { 
     CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag connectionAttributes = new CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag(); 
     connectionAttributes.EnsureCapacity(11); 
     connectionAttributes.Add("Connect Timeout", "15"); 
     connectionAttributes.Add("Data Source", serverName); 
     connectionAttributes.Add("General Timeout", "0"); 
     connectionAttributes.Add("Initial Catalog", databaseName); 
     connectionAttributes.Add("Integrated Security", false); 
     connectionAttributes.Add("Locale Identifier", "1033"); 
     connectionAttributes.Add("OLE DB Services", "-5"); 
     connectionAttributes.Add("Provider", "SQLOLEDB"); 
     connectionAttributes.Add("Tag with column collation when possible", "0"); 
     connectionAttributes.Add("Use DSN Default Properties", false); 
     connectionAttributes.Add("Use Encryption for Data", "0"); 

     DbConnectionAttributes attributes = new DbConnectionAttributes(); 
     attributes.Collection.Add(new NameValuePair2("Database DLL", "crdb_ado.dll")); 
     attributes.Collection.Add(new NameValuePair2("QE_DatabaseName", databaseName)); 
     attributes.Collection.Add(new NameValuePair2("QE_DatabaseType", "OLE DB (ADO)")); 
     attributes.Collection.Add(new NameValuePair2("QE_LogonProperties", connectionAttributes)); 
     attributes.Collection.Add(new NameValuePair2("QE_ServerDescription", serverName)); 
     attributes.Collection.Add(new NameValuePair2("SSO Enabled", false)); 

     ConnectionInfo connectionInfo = ReportClass.GetConnectionInfo(serverName, databaseName, userID, password); 
     connectionInfo.Attributes = attributes; 
     connectionInfo.Type = ConnectionInfoType.SQL; 

     TableLogOnInfo tableLogOnInfo = new TableLogOnInfo(); 
     tableLogOnInfo.ConnectionInfo = connectionInfo; 
     return tableLogOnInfo; 
    } 
+0

很棒..但阿拉伯字符轉換爲[????] ...我改變了區域標識符爲3073 ....但沒有任何行動 – 2018-02-15 06:34:41

1
CrystalReportSource1.Report = new Report { FileName = @"C:\test.rpt" }; 
CrystalReportSource1.ReportDocument.SetDatabaseLogon(user,pass,server,db)