2017-01-17 4 views
0

Я работаю с пакетами SSIS, и в настоящее время я застрял в этой проблеме. Я разрабатываю с использованием строки соединения, которую я написал в переменной пакета, и это значение переходит к соединительному манифесту через выражение. Что-то вроде этого: @ [Пользователь: Подключение]Ошибка конфигурации XML-файла в пакете SSIS

Он отлично работал для отладки. Поскольку мне нужно было вызвать некоторые хранимые процедуры внутри задач Script и компонентов Script, я бы просто вызвал переменную Package как строковое соединение с базой данных. Поскольку я новичок в мире ETL (менее месяца), и я делал некоторые пакеты (фактически на самом деле), я недавно прочитал, что должен сохранить мою ConnectionString в XML-файле и хранить такие вещи, как пользователь, пароль там (так как у производственного сервера, вероятно, будет другая учетная запись пользователя, как упоминалось here и here)

Теперь я попытался сделать то, что он говорит, но это не работает для меня. Поэтому я создал новый SSIS-пакет для тестирования, он содержит задачу скрипта и его вызов простой хранимой процедуры. Конфигурации пакет содержит только ConnectionString свойство из диспетчера подключений, и это выглядит примерно так:

<?xml version="1.0" ?> 
- <DTSConfiguration> 
- <DTSConfigurationHeading> 
    <DTSConfigurationFileInfo GeneratedBy="JohnSmith" GeneratedFromPackageName="Package" GeneratedFromPackageID="{2C421533-C76C-4583-841C-367C50DB61C1}" GeneratedDate="17/01/2017 --:--:-- p.m." /> 
    </DTSConfigurationHeading> 
- <Configuration ConfiguredType="Property" Path="\Package.Connections[OLEDB_CONNECTION].Properties[ConnectionString]" ValueType="String"> 
    <ConfiguredValue>Data Source=ServerName;User ID=UserName;Initial Catalog=DatabaseName;Provider=SQLNCLI10.1;Auto Translate=False;Application Name=SSIS-Package-{C24F1A69-A9A3-40D4-8A1E-7EA61E0EB57D}ServerName.DatabaseName.UserName;Use Encryption for Data=False;Password=abc123;</ConfiguredValue> 
    </Configuration> 
    </DTSConfiguration> 

Я добавил пароль в конце концов, так же, как ссылки в начале предложил, и пытался получить connetionString, как это в задаче Сценарий:

String cn = Dts.Connections["OLEDB_CONNECTION"].ConnectionString; 

и затем вызвать его в хранимой процедуре, как это:

using (OleDbConnection con = new OleDbConnection(cn)) 
{ 
    using (OleDbCommand cmd = new OleDbCommand("dbo.usp_sgn_conseguirNumDoc", con)) 
    { 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.Add("@var_CODDOC", OleDbType.VarChar, 3).Value = "001"; 
     cmd.Parameters.Add("@var_NUMDOC", OleDbType.BigInt).Direction = ParameterDirection.Output; 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
     result = Int64.Parse(cmd.Parameters["@var_NUMDOC"].Value.ToString()); 
    } 
    } 

, но он не работает в con.Open() поэтому, когда я проверяю ConnectionString, его же, но без Пароль значение, которое я написал. Его вроде он не читает его из файла конфигурации xml. Когда я проверил Tab сообщение в окне Список ошибок, я вижу это:

<DTS:ConnectionManager> 
<DTS:Property DTS:Name="DelayValidation">0</DTS:Property> 
<DTS:Property DTS:Name="ObjectName">OLEDB_CONNECTION</DTS:Property> 
<DTS:Property DTS:Name="DTSID">{C24F1A69-A9A3-40D4-8A1E-7EA61E0EB57D}</DTS:Property> 
<DTS:Property DTS:Name="Description"></DTS:Property> 
<DTS:Property DTS:Name="CreationName">OLEDB</DTS:Property><DTS:ObjectData><DTS:ConnectionManager> 
<DTS:Property DTS:Name="Retain">0</DTS:Property><DTS:Password DTS:Name="Password" Sensitive="1"></DTS:Password> 
<DTS:Property DTS:Name="ConnectionString">Data Source=ServerName;User ID=UserName;Initial Catalog=DatabaseName;Provider=SQLNCLI10.1;Auto Translate=False;Application Name=SSIS-Package-{C24F1A69-A9A3-40D4-8A1E-7EA61E0EB57D}ServerName.DatabaseName.UserName;Use Encryption for Data=False;</DTS:Property></DTS:ConnectionManager></DTS:ObjectData></DTS:ConnectionManager> 

Im из идеи о том, что делать, любая помощь будет оценена

Im с помощью Visual Studio 2008 и SQL Server 2008 .

+0

Вы связали свой пакет с конфигурационным файлом следующим образом: https://technet.microsoft.com/en-us/library/ms140213(v=sql.105).aspx –

+0

@ Nick.McDermaid Я сделал, и связал только свойство Connection String, от менеджеров подключений – Mokz

ответ

0

Наконец, через пару дней, размахивая головой на стол, удалось это сделать. Это глупое решение, но это не перешло бы мне на ум через тысячу лет! this question помог мне, а не принятый ответ, но эту часть прямо здесь:

Вы можете сохранить пароль в строке конфигурации, перейдя к свойствам и добавив пароль = ВАШ ПАРОЛЬ, но очень важно поставить пробел перед «пароль» слова и после ';'

Тот факт, что он работал, взорвал мой разум, что-то настолько простое и все же трудно найти. После этого, в задаче Script Я хотел бы использовать

String cn = Dts.Connections["OLEDB_CONNECTION"].ConnectionString; 

и внутри скрипта компонента (Task Flow Data) я должен настроить вкладку Диспетчер подключений (дал ему такое же имя: OLEDB_CONNECTION), а затем в скрипте , Я бы воспользовался:

String cn = This.Connections.OLEDBCONNECTION.ConnectionString; 

, и все было в порядке!

+0

Wow я этого не знал. Другой способ - просто использовать встроенную проверку подлинности Windows. Тогда вам не нужен пароль –

+0

Да, я хотел сделать это, но мне было предложено использовать аутентификацию SQL Server – Mokz