Программно установить источник данных для Crystal Report на Crystal Server через Crystal Web Services - PullRequest
5 голосов
/ 15 января 2010

Как изменить источник данных (сервер базы данных, имя пользователя, пароль), который отчет Crystal использует во время выполнения, работая на сервере Crystal?

У меня есть сервер Crystal, и я загрузил отчеты с установленным источником данных (SQL Server 2005, размещенный на сервере SERVER A, userA, passwordA). Я хотел бы запланировать запуск отчетов с использованием другого источника данных (SQL Server 2005, размещенного на SERVER B, userB, passwordB) из написанного мной клиента c #.

Клиент c # может планировать запуск отчетов на сервере, используя объекты, предоставляемые веб-сервисами Crystal. Я использовал следующие 3 объекта:

BIPlatform
InfoObject
CrystalReport

Документацию по этим объектам можно найти ЗДЕСЬ

Ответы [ 3 ]

5 голосов
/ 01 марта 2011

1/30/2018 - просто хотел добавить, что вам понадобится 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;
    }
2 голосов
/ 06 августа 2013
CrystalReportSource1.Report = new Report { FileName = @"C:\test.rpt" };
CrystalReportSource1.ReportDocument.SetDatabaseLogon(user,pass,server,db)
0 голосов
/ 26 января 2010

Вы должны попытаться получить некоторую информацию о ConnectionInfo Class


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

myConnectionInfo.DatabaseName = "Database";
myConnectionInfo.UserID = "Username";
myConnectionInfo.Password = "P@ssword";

Программно изменить расположение источника данных Crystal Reports - в VB, но вы можете использовать один из инструментов онлайн-перевода для преобразования из VB в C #:

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

...