[我们有许多SSRS站点可向各个位置提供报告。这些服务器中的每一个都在每个报表中都有自定义的连接(不要问为什么,这太难以理解了。)我们的目标是用每个服务器上所有报告的单个共享数据源替换所有这些自定义数据源。
为此,我创建了一个C#程序,它将在每台服务器上找到每个报告,并将当前的自定义数据源指向当前存在的共享数据源。这将执行,并且似乎工作正常。
我的下一个目标是使用C#在当前不存在的每台服务器上创建共享数据源。
我当前的困境在这里出现:
private static void CreateSharedDataSource(string user, string password, string connection)
{
DataSourceDefinition source = new DataSourceDefinition();
source.CredentialRetrieval = CredentialRetrievalEnum.Store;
source.ConnectString = connection;
source.Enabled = true;
source.EnabledSpecified = true;
source.Extension = "SQL";
source.ImpersonateUser = false;
source.ImpersonateUserSpecified = false;
source.Prompt = "Enter a user name and password to access the data source:";
source.UserName = user;
source.Password = password;
source.WindowsCredentials = true;
source.OriginalConnectStringExpressionBased = true;
source.UseOriginalConnectString = true;
try
{
service.CreateDataSource("DbDataSource", "/DsFolder", false, source, null);
Console.WriteLine("Data source created successfully");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
数据源已正确创建,并且用户名和密码已正确更新。问题是,当我查看服务器上新创建的数据源时,Connect字符串属性为空,是的,在上述方法中将正确的值传递给了它。如果我将该值插入服务器上的共享源并测试连接,它可以正常工作,但是我无法获得C#程序来更新该值本身。
所以,我缺少一些微妙的东西吗?我在误解那里的设置吗?我设置的值有误吗?
线索感激。
我从没有尝试过类似的方法,但是经过一番研究发现,这可能会有所帮助。
状态
“共享数据中不支持基于表达式的连接字符串来源。”
假设连接字符串只是纯文本字符串,那么我想您可以将其设置为false。这可能有助于保留您传入的字符串。
好的,找到我的答案。我有一个现有的数据源正在运行,因此我没有从头开始创建它,而是复制了它,只更改了名称。这样就创建了一个数据源,其中Connect字符串确实存在。将设置与我设置的内容进行比较:
source.UseOriginalConnectString = false;
而我的代码是:
source.UseOriginalConnectString = true;
在文档中查找并告诉我“如果为true,则将忽略ConnectString属性的值。”
嗯...很直观。听起来根本不是那样。 :)