对于我们的报表环境,我们允许用户“在线”运行报表(此代码基于CrystalDecisions.ReportAppServer.ClientDoc.ReportClientDocument)或“离线”运行报表,以便直接在Business Objects服务器上安排报表。该代码基于CrystalDecisions.Enterprise.Desktop.Report。
对于在线报告,我们可以通过以下代码以编程方式设置提供程序:
If crTableNew.ConnectionInfo.Kind = CrConnectionInfoKindEnum.crConnectionInfoKindCRQE Then
crLogonInfo = CType(crAttributes("QE_LogonProperties"), PropertyBag)
crLogonInfo("Data Source") = serverName
crLogonInfo("Initial Catalog") = databaseName
crLogonInfo("Provider") = "SQLNCLI11"
End If
但是,离线的等效代码似乎没有公开“ Provider”属性。等效的对象大致是这样:
CrystalDecisions.Enterprise.Desktop.Report.ReportLogons.Item(tableIndex),但似乎没有任何属性是提供者。
有人可以帮助吗?
答案 0 :(得分:0)
与LoginInfo Provider属性最接近的对应ReportLogon属性是ServerType属性。但是,我认为您不需要此即可设置数据库凭据。
您可能可以做类似的事情
foreach(ReportLogon reportLogon in reportLogons)
{
reportLogon.UseOriginalDataSource = false;
reportLogon.CustomServerName = serverName;
reportLogon.CustomUserName = userId;
reportLogon.CustomPassword = password;
reportLogon.CustomDatabaseName = databaseName;
foreach(TablePrefix tablePrefix in reportLogon.TableLocationPrefixes)
{
tablePrefix.MappedTablePrefix = databaseName + ".dbo.";
tablePrefix.UseMappedTablePrefix = true;
}
}
遍历TableLocationPrefixes可确保所有引用的表或存储过程都与登录凭据中指定的数据库相关联。