DataSource对象不包含此类属性,因为它是各种数据源的基类。尽管如此,这个DS是SQL Server类型的,因此ConnectionString的概念是有效的。
有没有办法从DataSource中提取这些信息?
答案 0 :(得分:1)
好的,首先,为什么?做暴露连接字符串之类的事情暴露了安全风险,甚至参与其中也是一种不好的做法。说几乎没有什么东西,但没有一个是优雅的,更多的参与。
如果您的报告已“部署”,则在安装了SSRS的服务器上的“ReportServer”上有一个目录。这假设您有一个SSRS服务器,并且该报告是“托管的”RDL报告而不是RDLC报告。假设你可以放入数据集来获取这些的sql类似于:
WITH ItemContentBinaries AS
(
SELECT
Name
, Type
, CONVERT(VARBINARY(MAX), Content) AS Content
FROM ReportServer.dbo.Catalog
WHERE Type = 5 -- datasources
)
, ItemContentNoBOM AS
(
SELECT
Name
, CASE WHEN LEFT(Content, 3) = 0xEFBBBF THEN CONVERT(VARBINARY(MAX), SUBSTRING(Content, 4,LEN(Content)))
ELSE Content
END AS Content
FROM ItemContentBinaries
)
, xmlcontent as
(
SELECT
Name AS DataSourceName
, CONVERT(xml, replace(Content, 'xmlns="http://schemas.microsoft.com/sqlserver/reporting/2006/03/reportdatasource"', '') ) AS ContentXML
FROM ItemContentNoBOM
)
Select
DataSourceName
, ContentXML
, ContentXML.query('/DataSourceDefinition/ConnectString/.').value('.', 'varchar(max)')
from xmlcontent
您可以尝试在报告中放置“自定义代码”,并从rdl语言中获取连接字符串。 http://social.msdn.microsoft.com/Forums/sqlserver/en-US/27de3f46-5174-480d-b4d1-5e32772dae35/ssrs-2005-custom-code-shared-data-source-connection-string?forum=sqlreportingservices
您可以在C#或VB.net中的代码中执行类似操作以获取值,但我再次认为必须托管报表。它的代码与此类似:
How to get the data source information from a SSRS report, using .NET
您可以执行2和3的变体并将'.rds'文件作为xml使用,并在C#或VB.NET中解析它。
所有这些解决方案都要求部署报告或者您在服务器上知道的固定位置是报告的数据源,除了我从未尝试过的2。据我所知,连接字符串是一个嵌入式对象,因为它可能包含密码而无法公开。
答案 1 :(得分:0)
一种解决方法是使数据源使用“基于表达式的连接字符串”。然后使用参数创建此连接字符串,然后可以在报表的其他位置使用这些参数。例如:
="data source=" & Parameters!ServerName.Value & ";initial catalog=AdventureWorks"