Crystal报表 - 无效的登录参数错误

时间:2010-11-12 18:51:03

标签: crystal-reports

我有一个水晶报告在我的本地机器上工作正常但是当我将它移动到我的服务器时它会给我一个“不正确的登录参数”。

代码如下。它是从.net应用程序调用的

Dim CR As New ReportDocument

    Dim str As String = Application.StartupPath
    If PrintDialog1.ShowDialog() <> Windows.Forms.DialogResult.OK Then Exit Sub
    CR.Load(Application.StartupPath & "\CR Reports\BookPickByConsignee.rpt")
    CR.SetParameterValue("param_picknumber", Me.txtpickNumber.Text.Trim())
    CR.DataSourceConnections.Item(0).SetConnection(Configuration.ConfigurationSettings.AppSettings("DatabaseServer").ToString(), Configuration.ConfigurationSettings.AppSettings("DatabaseName").ToString(), Configuration.ConfigurationSettings.AppSettings("UserName").ToString(), Configuration.ConfigurationSettings.AppSettings("Password").ToString())
    'CR.DataSourceConnections.Item(0).SetLogon("sa", "pwd")
    '            CR.SetDatabaseLogon("sa", "pwd")

    CR.PrintOptions.PrinterName = PrintDialog1.PrinterSettings.PrinterName

    CR.PrintToPrinter(Me.txtCopies.Text, True, 1, 100)
    CR.Close()

1 个答案:

答案 0 :(得分:0)

您可以使用以下代码在运行时为报告应用某些连接详细信息 对不起,代码在c#。
请在加载报告rpt文件后使用该方法,而不是CR.DataSourceConnections.Item(0).SetConnection,并将所需的连接详细信息传递给方法,它将起作用。

    public static void CrystalReportLogOn(ReportDocument reportParameters,
                                          string serverName,
                                          string databaseName,
                                          string userName,
                                          string password)
    {
        TableLogOnInfo logOnInfo;
        ReportDocument subRd;
        Sections sects;
        ReportObjects ros;
        SubreportObject sro;

        if (reportParameters == null)
        {
            throw new ArgumentNullException("reportParameters");
        }

        try
        {
            foreach (CrystalDecisions.CrystalReports.Engine.Table t in reportParameters.Database.Tables)
            {
                logOnInfo = t.LogOnInfo;
                logOnInfo.ReportName = reportParameters.Name;
                logOnInfo.ConnectionInfo.ServerName = serverName;
                logOnInfo.ConnectionInfo.DatabaseName = databaseName;
                logOnInfo.ConnectionInfo.UserID = userName;
                logOnInfo.ConnectionInfo.Password = password;
                logOnInfo.TableName = t.Name;
                t.ApplyLogOnInfo(logOnInfo);
                t.Location = t.Name;
            }
        }
        catch
        {
            throw;
        }

        sects = reportParameters.ReportDefinition.Sections;
        foreach (Section sect in sects)
        {
            ros = sect.ReportObjects;
            foreach (ReportObject ro in ros)
            {
                if (ro.Kind == ReportObjectKind.SubreportObject)
                {
                    sro = (SubreportObject)ro;
                    subRd = sro.OpenSubreport(sro.SubreportName);
                    try
                    {
                        foreach (CrystalDecisions.CrystalReports.Engine.Table t in subRd.Database.Tables)
                        {
                            logOnInfo = t.LogOnInfo;
                            logOnInfo.ReportName = reportParameters.Name;
                            logOnInfo.ConnectionInfo.ServerName = serverName;
                            logOnInfo.ConnectionInfo.DatabaseName = databaseName;
                            logOnInfo.ConnectionInfo.UserID = userName;
                            logOnInfo.ConnectionInfo.Password = password;
                            logOnInfo.TableName = t.Name;
                            t.ApplyLogOnInfo(logOnInfo);
                        }
                    }
                    catch
                    {
                        throw;
                    }
                }
            }
        }
    }