通过 Crystal Web 服务以编程方式为 Crystal Server 上的 Crystal Report 设置数据源

Programmatically set the datasource for a Crystal Report on a Crystal Server via Crystal Web Services(通过 Crystal Web 服务以编程方式为 Crystal Server 上的 Crystal Report 设置数据源)
本文介绍了通过 Crystal Web 服务以编程方式为 Crystal Server 上的 Crystal Report 设置数据源的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何更改 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 托管在 SERVER A、userA、passwordA 上).我想安排报告使用与我编写的 c# 客户端不同的数据源(托管在 SERVER B、userB、passwordB 上的 SQL Server 2005)运行.

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

推荐答案

1/30/2018 - 只是想补充一下,您将需要 CrystalDecisions.ReportAppServer.DataDefModel dll

1/30/2018 -Just wanted to add that you will need the CrystalDecisions.ReportAppServer.DataDefModel dll

我遇到了同样的问题,我有一个具有 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 服务以编程方式为 Crystal Server 上的 Crystal Report 设置数据源的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)