SQL Службы отчетов сервера не могут установить строку подключения к источнику данных - PullRequest
0 голосов
/ 15 января 2020

У нас есть несколько сайтов 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# обновить это значение.

Итак, есть ли что-то тонкое, что я ' м отсутствует? Я неправильно понимаю настройку там? Я неправильно установил значение?

Подсказки оценены.

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Хорошо, нашел мой ответ. У меня был уже существующий источник данных, который работал, поэтому вместо того, чтобы создавать его с нуля, я скопировал его и изменил только имя. Это создало источник данных, где строка Connect сохранилась. Сравнение настроек в том, что я устанавливал, показало:

source.UseOriginalConnectString = false;

, тогда как мой код был:

source.UseOriginalConnectString = true;

Поиск в документах, и он говорит мне: «Если это правда, значение свойства ConnectString игнорируется. "

Хммм ... это интуитивно понятно. Это не то, на что это похоже. :)

0 голосов
/ 16 января 2020

Я никогда не пробовал ничего подобного, но быстрое исследование обнаружило, что это может быть полезно.

https://docs.microsoft.com/en-us/dotnet/api/reportservice2010.datasourcedefinition.originalconnectstringexpressionbased?view=sqlserver-2016

В нем говорится

"Строки подключения на основе выражений не поддерживаются в общих источниках данных."

Если предположить, что строка подключения представляет собой просто текстовую строку, то я думаю, что вы можете установить ее на ложный. Это может помочь сохранить строку, которую вы передаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...