2017-01-17 3 views
0

Ich habe mit SSIS-Paketen gearbeitet, und ich bin derzeit in diesem Problem stecken. Ich habe mit einer Verbindungszeichenfolge entwickelt, die ich in eine Paketvariable geschrieben habe, und dieser Wert wird über einen Ausdruck an den Verbindungsmanager übergeben. Etwas wie dieses: @ [Benutzer :: Verbindung]Fehler XML-Konfigurationsdatei im SSIS-Paket

Es war großartig zum Debuggen. Da ich einige gespeicherte Prozeduren in Skriptaufgaben und Skriptkomponenten aufrufen musste, würde ich einfach die Paketvariable als String-Verbindung zur Datenbank aufrufen. Da ich neu in der ETL-Welt bin (weniger als einen Monat) und einige Pakete gemacht habe (6 tatsächlich), las ich erst kürzlich, dass ich meinen ConnectionString in einer XML-Datei speichern und Dinge wie Benutzer speichern sollte. Passwort da (Da Produktionsserver wird wahrscheinlich andere Benutzerkonto haben, wie erwähnt here und here)

Jetzt habe ich versucht zu tun, was es sagt, aber es funktioniert nicht für mich. Also habe ich ein neues SSIS-Paket zum Testen erstellt, es enthält eine Skript-Aufgabe und ruft eine einfache Stored Procedure auf. Das Paket Konfiguration enthält nur die Connectionstring-Eigenschaft aus dem Connection Manager, und es sieht so etwas wie diese:

<?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> 

Ich hat das Passwort am Ende, ebenso wie die Verbindung zu Beginn vorgeschlagen, und versuchte zu erhalten die connetionString wie dies in der Task-Script:

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

und nannte es dann in der gespeicherten Prozedur, wie folgt aus:

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()); 
    } 
    } 

aber es schlägt in con.Open() so, wenn ich den ConnectionString überprüfen, ist es das gleiche, aber ohne das Passwort Wert, den ich schrieb. Es ist wie es nicht aus der XML-Konfigurationsdatei liest. Als ich die Nachricht Tab im Fenster Fehlerliste überprüfte, sehe ich:

<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 aus Idee, was zu tun ist, wird jede Hilfe

Im mit Visual Studio 2008 und SQL Server 2008 geschätzt werden

+0

Haben Sie Ihr Paket mit der Konfigurationsdatei wie folgt verbunden: https://technet.microsoft.com/en-us/library/ms140213(v=sql.105).aspx –

+0

@ Nick.McDermaid Ich tat, und verband nur die Connection String-Eigenschaft von Connection Managers – Mokz

Antwort

0

Endlich, nach ein paar Tagen, die meinen Kopf zum Schreibtisch zerbrachen, schafften es, es zu tun. Es ist eine dumme Lösung, aber in tausend Jahren wäre es mir nicht in den Sinn gekommen! this question half mir, nicht die akzeptierte Antwort, aber diesen Teil hier:

Sie das Passwort, indem Sie auf Eigenschaften und das Hinzufügen Passwort in der Konfigurationsstring speichern = IhrKennwort aber sehr wichtig, einen Platz vor dem ‚Passwort‘ Wort setzen und nach ';'

Die Tatsache, dass es funktioniert hat, blies meine Meinung, etwas so einfach und doch schwer zu finden. Danach wird in einem Script Aufgabe würde ich

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

und in einer Skriptkomponente (Data Flow-Task) verwende ich die Verbindung Manager auf die Registerkarte zu konfigurieren hatte (gab es den gleichen Namen: OLEDB_CONNECTION), und dann in das Skript Würde ich verwenden:

String cn = This.Connections.OLEDBCONNECTION.ConnectionString; 

und es hat gut funktioniert!

+0

Wow, ich wusste das nicht. Eine andere Möglichkeit besteht darin, die durchgängig integrierte Windows-Authentifizierung zu verwenden. Dann brauchen Sie kein Passwort –

+0

Ja, ich wollte das tun, aber es wurde speziell gebeten, die SQL Server-Authentifizierung zu verwenden – Mokz