Linq2sql用于水晶报告的连接字符串。报告需要登录

时间:2012-08-23 21:15:41

标签: c# winforms c#-4.0 linq-to-sql crystal-reports

如果我取出连接字符串信息,报告可以从我的机器上正常运行,但是任何其他用户都要求输入登录信息,所以我试图添加连接信息。未编译的行是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服务器登录屏幕,无论我输入它失败。我认为这是由于没有数据库名称,它不允许我手动输入。

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

enter image description here

2 个答案:

答案 0 :(得分: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;

.........................

答案 1 :(得分:0)

使用直接的sql数据源是个问题。我不得不将它更改为OLE DB(ADO)for sql server以使其工作。哦水晶报告....