2010-01-15 12 views
5

Jak zmienić źródło danych (serwer bazy danych, nazwa użytkownika, hasło), którego używa raport Crystal w czasie wykonywania, działający na serwerze kryształów?Programowo ustaw źródło danych dla raportu Crystal na serwerze Crystal za pośrednictwem Crystal Web Services

Mam serwer kryształów i przesyłam raporty z ustawionym źródłem danych (SQL Server 2005 hostowany na SERVER A, userA, passwordA). Chciałbym zaplanować uruchamianie raportów przy użyciu innego źródła danych (SQL Server 2005 hostowanego na SERVER B, userB, passwordB) z klienta C#, który napisałem.

Klient C# może planować uruchamianie raportów w serwerze przy użyciu obiektów dostarczanych przez kryształowe usługi sieciowe. Używam 3 następujące obiekty:

BIPlatform 
InfoObject 
CrystalReport 

Dokumentacja na tych obiektach można znaleźć HERE

+0

dokumentacji łącza punkt jA va dokumentacja, ale oznaczyłeś swoje pytanie jako pytanie C#? –

Odpowiedz

0

Należy starać się uzyskać pewne informacje o 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 - w VB, ale możesz użyć jednego z internetowych narzędzi do tłumaczenia, aby przekonwertować z VB na C#:

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

+0

Klasa ConnectionInfo nie jest wyświetlana przez kryształową usługę sieci Web. Jest to klasa zawarta w pliku CrystalDecisions.Shared.dll. Potrzebuję rozwiązania, które używa obiektów usług sieci Web, ponieważ uważam, że jest to jedyny sposób, w jaki mogę wchodzić w interakcje z raportami, ponieważ są one hostowane na serwerze sieci Web Crystal. – argyle

4

1/30/2018 -Po prostu chciałem dodać, że trzeba będzie dll CrystalDecisions.ReportAppServer.DataDefModel

Miałem ten sam problem, gdzie mam raport, który zawiera MSACCESS połączenia z bazą danych i musiałem zmienić na SQLServer, zajęło 2 dni do tego dojść:

  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

świetny .. ale znaki arabskie konwertowane na [????] ... zmieniły identyfikator lokalizacji na 3073 .... ale brak działania –

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