1

如果我取出连接字符串信息,报告在我的机器上运行良好,但它要求任何其他用户提供登录信息,所以我正在尝试添加连接信息。未编译的行是cr1.SetDatabaseLogon(connection, cr1);

我究竟做错了什么?任何帮助,将不胜感激!

private void launchReport(int pKReport)
{
    using (DataClasses1DataContext db = new DataClasses1DataContext())
    {
        var query = (from s in db.expenseHdrs
                     join d in db.expenseDtls on s.rptNo equals d.rptNo
                     where s.rptNo == pKReport
                     from g in db.employees
                     join r in db.expenseHdrs on g.pk equals r.empPk
                     select new
                     {
                         s.period,
                         s.description,
                         s.department,
                         s.rptNo,
                         s.reimbursement, g.name, 
                         d.expDate,
                         d.expType,
                         d.expDesc
                     });

        CrystalReport1 cr1 = new CrystalReport1();

        ConnectionInfo connection = new ConnectionInfo();
        connection.DatabaseName = "intranet";
        connection.UserID = "sa";
        connection.Password = "*****";
        cr1.SetDatabaseLogon(connection, cr1);

        cr1.SetDataSource(query);
        crystalReportViewer1.ReportSource = cr1;
    }
}

我还尝试在查询后将代码更改为下面,但是当我没有连接字符串凭据时,我仍然遇到与以前完全相同的问题。在除我自己以外的每个用户上,我都会得到相同的 sql server 登录屏幕,无论我输入什么,它都会失败。我认为这是因为没有数据库名称,它不允许我手动输入。

 CrystalReport1 cr1 = new CrystalReport1();
            cr1.FileName = @"C:\Intranet\CrystalReport1.rpt";

            ConnectionInfo connectionInfo = new ConnectionInfo();
            connectionInfo.ServerName = "svr-sql";
            connectionInfo.DatabaseName = "intranet";
            connectionInfo.UserID = "sa";
            connectionInfo.Password = "*****";

            SetDBLogonForReport(connectionInfo, cr1);
            cr1.SetDataSource(query);
            crystalReportViewer1.ReportSource = cr1;
        }
    }

private void SetDBLogonForReport(ConnectionInfo connectionInfo, CrystalReport reportDocument)
    {
        Tables tables = reportDocument.Database.Tables;
        foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
        {
            TableLogOnInfo tableLogonInfo = table.LogOnInfo;
            tableLogonInfo.ConnectionInfo = connectionInfo;
            table.ApplyLogOnInfo(tableLogonInfo);
        }
    }

在此处输入图像描述

4

2 回答 2

1
CrystalReport1 cr1 = new CrystalReport1();
    cr1.FileName = @"C:\Intranet\CrystalReport1.rpt";

    ConnectionInfo connectionInfo = new ConnectionInfo();
    connectionInfo.ServerName = "svr-sql";
    connectionInfo.DatabaseName = "intranet";
    connectionInfo.UserID = "sa";
    connectionInfo.Password = "*****";


    //add this code 

    connectionInfo.IntegratedSecurity = false;

.........................
于 2012-08-24T05:00:41.947 回答
0

使用直接的 sql 数据源是问题所在。我必须将其更改为 OLE DB(ADO) 才能让 sql server 正常工作。哦,水晶报告……

于 2012-08-28T14:50:52.620 回答