Crystal报告 - 登录失败

时间:2011-07-24 22:45:54

标签: asp.net reporting-services crystal-reports

我看到主题并不新鲜,但我搜索了很多网站,发现了许多线索,但没有任何对我有用:(

我在ASP.NET应用程序中使用Crystal Reports Viewer控件。报告很简单,我必须通过两个参数。我的网站上有两个CrystalReportsSource和一个CrystalReportsViewer控件。当页面加载时,我运行此代码片段:

CrystalReportSource1.ReportDocument.SetParameterValue("name", Session["name"].ToString());
CrystalReportSource1.ReportDocument.SetParameterValue("code", Session["code"].ToString());
CrystalReportViewer1.ReportSource = CrystalReportSource1;

需要设置源代码,因为我有两种报告,并且根据其他会话参数,我会更改我应该在屏幕上打印哪个报告(以及我应该绑定哪个报告源)。

不幸的是,这段代码对我不起作用。 CRViewer向我显示一些提示/框说“登录数据库失败”(它只是我的翻译,因为这是我的语言环境)。我不知道如何使它工作。也不是我的DB(Access),报告也不需要凭证登记(换句话说 - 我不必将它们放在任何地方)。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

由于您正在动态更改报告源,因此您还需要动态指定登录。

如果您的服务器和数据库相同,那将会更容易。我自己没试过,但你可以尝试一下。

Private Sub aMethod(ByVal name as String, ByVal sessionName as String)Handles Me.Load

    Try
        Dim cryRpt As New ReportDocument
        Dim crtableLogoninfos As New TableLogOnInfos
        Dim crtableLogoninfo As New TableLogOnInfo
        Dim crConnectionInfo As New ConnectionInfo
        Dim CrTables As Tables
        Dim CrTable As Table

        Select Case sessionName
          Case OneSessionName 'specify a session name here'
              Dim rptDoc = OneSessionName
          Case AnotherSessionName 'specify other session name here'
               Dim rptDoc = AnotherSessionName 
        End Select

        Dim rptDoc = CType(rptDoc, String)

        cryRpt.Load(rptDoc)

        Select Case sessionName 
          Case OneSessionName 
            With crConnectionInfo
              .ServerName = "yourServer1Name"
              .DatabaseName = "YourDB1Name"
              .UserID = "yourUser1Id"
              .Password = "yourPassword1"
           End With
         Case AnotherSessionName 
           With crConnectionInfo
              .ServerName = "yourServer2Name"
              .DatabaseName = "YourDB2Name"
              .UserID = "yourUser2Id"
              .Password = "yourPassword2"
          End With
       End Select

        CrTables = cryRpt.Database.Tables
        For Each CrTable In CrTables
            crtableLogoninfo = CrTable.LogOnInfo
            crtableLogoninfo.ConnectionInfo = crConnectionInfo
            CrTable.ApplyLogOnInfo(crtableLogoninfo)
        Next

        crsAllReports.PrintMode = PaperOrientation.Landscape
        crsAllReports.ReportSource = cryRpt
    Catch ex As Exception
        lblError.Text = "No report" 
        lblError.Visible = True
    End Try

End Sub

注意'如果您的服务器和数据库名是相同的,则可能不需要第二个switch语句。而只是使用:          With crConnectionInfo .ServerName = "yourServerName" .DatabaseName = "YourDBName" .UserID = "yourUserId" .Password = "yourPassword" End With