以编程方式通过Crystal Web Services在Crystal Server上为Crystal报表设置数据源 [英] Programmatically set the datasource for a Crystal Report on a Crystal Server via Crystal Web Services

查看:206
本文介绍了以编程方式通过Crystal Web Services在Crystal Server上为Crystal报表设置数据源的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何更改Crystal报表在Crystal服务器中运行时使用的数据源(数据库服务器,用户名和密码)?

How can I change the data source (database server, username, password) that a Crystal report uses at runtime, running within a crystal server?

我有一个水晶服务器并已上传具有设置数据源(SQL Server 2005托管在服务器A,用户A,密码A上)的报告。我想计划使用不同的数据源(SQL Server 2005托管在服务器B,用户B,密码B)从我写的c#客户端运行报表。

I have a crystal server and have uploaded reports that have a set datasource (SQL Server 2005 hosted on SERVER A, userA, passwordA). I would like to schedule reports to run using a different datasource (SQL Server 2005 hosted on SERVER B, userB, passwordB) from the c# client I've written.

c#客户端可以使用Crystal Web服务提供的对象来计划在服务器中运行报表。
我一直在使用以下3个对象:

The c# client can schedule reports to run within the server using objects provided by the crystal webservices. I've been using the following 3 objects:

BIPlatform
InfoObject
CrystalReport

这些对象的文档可以在这里

Documentation on these objects can be found HERE

推荐答案

我有同样的问题,我有一个报告,有MSAccess数据库连接,我需要更改为SQLServer,需要2天时间来解决这个问题:

I had the same problem, where i have a report that has MSAccess database connection and i needed to change that to SQLServer, it took 2 days to figure this out:

            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;
    }

这篇关于以编程方式通过Crystal Web Services在Crystal Server上为Crystal报表设置数据源的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆