Я пытаюсь сканировать пакеты служб SSIS, развернутые на SQL server, на наличие определенных элементов кода
Этот SQL-запрос возвращает все пакеты служб SSIS, видимые при расширении узла "каталоги служб Integration Services" в среде SQL Server Management Studio:
USE SSISDB SELECT [package_id] ,fd.name as fd_name ,proj.name as proj_name ,pk.[name] as pk_name ,[package_guid] FROM [catalog].[packages] pk INNER JOIN [catalog].[projects] proj ON pk.project_id = proj.project_id INNER JOIN [catalog].[folders] fd ON proj.folder_id = fd.folder_id ORDER BY fd.name, proj.name, pk.name
Что я уже пробовал:
В C# я использую приведенный ниже код для перебора приведенной выше таблицы данных.
("cn" - это класс со строковым атрибутом "Connstr" и методом "DataTableSQL", который возвращает объект DataTable и принимает приведенную выше строку SQL в качестве аргумента).
Ни один из пакетов не зашифрован и не требует пароля для выполнения, т. е. используются аргументы "null" для "serverUserName" и "serverPassword".
Строка подключения:
"источник данных=Имя сервера;Начальный Каталог=Имя базы данных;Комплексная Безопасность=True;В Сохранять Сведения О Безопасности=False В"
SqlConnectionStringBuilder csb = new SqlConnectionStringBuilder(cn.ConnStr); Application ssisApplication = new Application(); DataTable dt = cn.DataTableSQL(<SQL>); foreach (DataRow dr in dt.Rows) { string fd_name = "", proj_name = "", pk_name = "", pk_location = ""; if (!dr.IsNull(1)) fd_name = dr[1].ToString(); if (!dr.IsNull(2)) proj_name = dr[2].ToString(); if (!dr.IsNull(3)) { FileInfo fp = new FileInfo(dr[3].ToString()); pk_name = fp.Name.Substring(0, fp.Name.Length - fp.Extension.Length); pk_location = string.Format(@"\{0}\{1}\{2}", fd_name, proj_name, pk_name); } try { Package pkg = new Package(); pkg = ssisApplication.LoadFromSqlServer(pk_name, csb.DataSource, null, null, null); // Processing steps to be added to parse pkg.Executables... } catch (Exception ex) { Debug.WriteLine(ex.Message, pk_name); } }
Я получаю эту ошибку для каждой строки данных:
Цитата:Указанный пакет не может быть загружен из базы данных SQL Server.
Какую комбинацию "fd_name", "proj_name" и "pk_name" лучше всего использовать для "pk_location", если она используется в качестве первого аргумента функции "LoadFromSqlServer" вместо "pk_name"?
Любая помощь будет очень признательна.
RedDk
"Какая комбинация ... и т. д."? Очевидно, любой, который работает. "Лучший" ... ни одно слово не имеет никакого значения в программном смысле, особенно если оно не используется в качестве ключевого слова в коде.