从C#Program

时间:2017-08-07 13:08:50

标签: c# sql-server crystal-reports

我在生成Crystal Report的C#程序中有以下方法:

    public static ReportDocument CreateCrystalReport(String serverName, String databaseName, Boolean useIntegratedSecurity
        , String username, String password, String reportName, Dictionary<String, object> reportParams)
    {
        try
        {
            ReportDocument _report = new ReportDocument();
            _report.Load(reportName);

            // Define a new database connection
            ConnectionInfo _connectionInfo = new ConnectionInfo();
            _connectionInfo.ServerName = serverName.Trim(new char[] { '\\' });
            _connectionInfo.DatabaseName = databaseName;
            if (useIntegratedSecurity)
                _connectionInfo.IntegratedSecurity = true;
            else
            {
                _connectionInfo.UserID = username;
                _connectionInfo.Password = password;
            }

            // Replace the connection info associated with each table in the report with the updated connection information.
            foreach (Table _table in _report.Database.Tables)
            {
                TableLogOnInfo _logonInfo = _table.LogOnInfo;
                _logonInfo.ConnectionInfo = _connectionInfo;
                _table.ApplyLogOnInfo(_logonInfo);
            }

            // add parameters to report
            foreach (KeyValuePair<String, object> _param in reportParams)
            {
                _report.SetParameterValue(_param.Key, _param.Value);
            }

            return _report;
        }
        catch (Exception ex)
        {
            Log.Write(LogLevel.Error, "Error generating Crystal Report: " + ex.Message);
            return null;
        }
    }

我尝试运行的报告是在Crystal Reports中构建/测试的,而不是直接在Visual Studio中构建/测试的。这是必要的,因为我们有可能添加或修改此程序将运行的Crystal Reports的顾问。

为了构建/测试此报告,我连接到我的测试数据库(服务器A)。然后,我将报告复制到另一台测试机器(服务器B),其中C#程序具有不同的SQL服务器数据库和凭据。当我尝试在服务器B上执行报告时,我收到此错误:

enter image description here

然后我在服务器B上打开报告,点击F5运行并修改报告中的连接信息以使其运行。该报告现在从Crystal Reports和服务器B上的C#程序运行。

然后我将报告从服务器B复制到服务器A,当我尝试在服务器A上运行时,我得到与上面相同的错误。

当Crystal Report连接到SQL时,似乎没有使用C#程序提供的连接信息。如果我逐步调试,我可以验证上面代码中的_connectionInfo是否正在更新,所以我不知道为什么它没有被使用。

设置Crystal Report连接时是否缺少某些登录信息或连接信息?我需要在Crystal Report中做些什么来告诉它使用C#程序中的连接信息吗?

0 个答案:

没有答案