如何在存储过程中构建Crystal报表?

时间:2012-06-06 16:56:30

标签: vb.net sql-server-2008 stored-procedures crystal-reports-2010

我有几十个遗留报告,其中许多都使用Sql Server存储过程作为其数据源。我正在尝试在使用 VB.NET 2010 CR for Visual Studio 2010版本13.0.2 构建的应用程序中使用它们。

当我根据存储过程运行报表时,会收到类似

的错误消息
  

无法找到“REPORT_SCHEDULEB”表

报告中的表定义如下所示:

LogOnInfo.ConnectionInfo for REPORT_SCHEDULEB:
Name: "REPORT_SCHEDULEB", Location: "Proc(REPORT_SCHEDULEB;1)"
AllowCustomConnection: False, DBName: myDb, IntegratedSecurity: False
ServerName: myComputer, User: myName, Password: myPassword, Attributes:
    Database DLL: crdb_ado.dll
    QE_DatabaseName: myDb
    QE_DatabaseType: OLE DB (ADO)
        Auto Translate: -1
        Connect Timeout: 0
        Data Source: myComputer
        General Timeout: 0
        Initial Catalog: myDb
        Integrated Security: False
        Locale Identifier: 1033
        OLE DB Services: -5
        Provider: SQLOLEDB
        Tag with column collation when possible: 0
        Use DSN Default Properties: False
        Use Encryption for Data: 0
        Owner: dbo
    QE_ServerDescription: myComputer
    QE_SQLDB: True
    SSO Enabled: False
    Owner: dbo

我猜测 Location 字段的定义存在一些问题,但是

  1. 当我尝试更改重写的合格表名时 报告编辑器不接受更改,
  2. 我真的很想找到一个程序化的解决方案,而不是手工编辑几十个报告。
  3. 所以,我尝试在我的代码中设置table.Location值,但是抛出了一个COM异常 - 我想它只是在某种程度上读取。

    我还想到了设置某种 QualifiedName 属性的可能性,但还没有找到办法。

    有什么想法吗?

    TIA

1 个答案:

答案 0 :(得分:0)

我通过使用从存储过程创建的数据表在运行时设置报表数据源,在VB中实现了一个解决方案。这样,所有连接细节只需要在应用程序中存储一次,而不是存储在每个报告中。

(粗略地)

Dim SourceDatabase as datatable = GetDatatableFromSP(SPName)
Dim DocumentToShow as New ReportDocument

DocumentToShow.Load(DocumentPath)
DocumentToShow.SetDataSource(SourceDatabase)

ReportViewer.ViewerCore.ReportSource = DocumentToShow