3

我有几十个旧报表,其中许多都使用 Sql Server 存储过程作为数据源。我正在尝试在使用VB.NET 2010CR for Visual Studio 2010 version 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. 我真的宁愿找到一个程序化的解决方案,而不是手动编辑数十份报告。

因此,我尝试在我的代码中设置 table.Location 值,但这会引发 COM 异常——我猜它在某种程度上是只读的。

我还想到了设置某种QualifiedName属性的可能性,但还没有找到一种方法来做到这一点。

有任何想法吗?

TIA

4

1 回答 1

0

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

(大致)

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

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

ReportViewer.ViewerCore.ReportSource = DocumentToShow 
于 2014-08-08T20:44:12.193 回答