<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblog.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>SSIS Junkie : C#</title><link>http://sqlblog.com/blogs/jamie_thomson/archive/tags/C_2300_/default.aspx</link><description>Tags: C#</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Verify a connection before using it [SSIS]</title><link>http://sqlblog.com/blogs/jamie_thomson/archive/2011/10/25/verify-a-connection-before-using-it-ssis.aspx</link><pubDate>Tue, 25 Oct 2011 14:35:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:39373</guid><dc:creator>jamiet</dc:creator><slash:comments>5</slash:comments><comments>http://sqlblog.com/blogs/jamie_thomson/comments/39373.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/jamie_thomson/commentrss.aspx?PostID=39373</wfw:commentRss><wfw:comment>http://sqlblog.com/blogs/jamie_thomson/rsscomments.aspx?PostID=39373</wfw:comment><description>&lt;p&gt;Just recently I've inherited some SSIS packages that were in dire need of fixing however, as is often the case, most of my battles were with connection string configurations.&lt;/p&gt;  &lt;p&gt;It always baffles me when I see packages that don't log information that would be useful for debugging purposes and when its me that has to debug those packages I tend to get a little irate. Do a favour to yourself and the poor soul that inherits your packages by placing a Script Task at the start of your package with the following code in it:&lt;/p&gt;    &lt;div id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:b3afaf57-e4f4-43cc-8c80-db51e66aee12" class="wlWriterEditableSmartContent" style="float:none;padding:0px;margin:0px;display:inline;"&gt;&lt;pre style="overflow:auto;"&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;public&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt; Main()&lt;br&gt;        {&lt;br&gt;            &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt; failure &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;span&gt;;&lt;br&gt;            &lt;/span&gt;&lt;span&gt;bool&lt;/span&gt;&lt;span&gt; fireAgain &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;br&gt;            &lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt; (var ConnMgr &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; Dts.Connections)&lt;br&gt;            {&lt;br&gt;                Dts.Events.FireInformation(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;, String.Format(&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;ConnectionManager='{0}', ConnectionString='{1}'&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;,&lt;br&gt;                    ConnMgr.Name, ConnMgr.ConnectionString), &lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;ref&lt;/span&gt;&lt;span&gt; fireAgain);&lt;br&gt;                &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt;&lt;br&gt;                {&lt;br&gt;                    ConnMgr.AcquireConnection(&lt;/span&gt;&lt;span&gt;null&lt;/span&gt;&lt;span&gt;);&lt;br&gt;                    Dts.Events.FireInformation(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;, String.Format(&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;Connection acquired successfully on '{0}'&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;, &lt;br&gt;                        ConnMgr.Name), &lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;ref&lt;/span&gt;&lt;span&gt; fireAgain);&lt;br&gt;                }&lt;br&gt;                &lt;/span&gt;&lt;span&gt;catch&lt;/span&gt;&lt;span&gt; (Exception ex)&lt;br&gt;                {&lt;br&gt;                    Dts.Events.FireError(&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;, String.Format(&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;Failed to acquire connection to '{0}'. Error Message='{1}'&lt;/span&gt;&lt;span&gt;"&lt;/span&gt;&lt;span&gt;, &lt;br&gt;                        ConnMgr.Name, ex.Message),&lt;br&gt;                        &lt;/span&gt;&lt;span&gt;""&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;);&lt;br&gt;                    failure &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;br&gt;                }&lt;br&gt;            }&lt;br&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; (failure)&lt;br&gt;                Dts.TaskResult &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;)ScriptResults.Failure;&lt;br&gt;            &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;&lt;br&gt;                Dts.TaskResult &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;)ScriptResults.Success;&lt;br&gt;        }&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;br&gt;You'll be glad that you did because you'll get your connection strings appearing &lt;i&gt;in your log file&lt;/i&gt;:



&lt;blockquote&gt;
  &lt;p&gt;&lt;font face="Consolas"&gt;SCR Output Connection Strings: ConnectionManager='DB', ConnectionString='&lt;b&gt;Data Source=dev;Initial Catalog=AdventureWorks;Integrated Security=SSPI;&lt;/b&gt;' 
      &lt;br&gt;SCR Output Connection Strings: Connection acquired successfully on 'DB'&lt;/font&gt; 

    &lt;br&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://twitter.com/jamiet" target="_blank"&gt;@jamiet&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;P.S. Those of you that have been following my blog long enough may know that I posted this &lt;a href="http://consultingblogs.emc.com/jamiethomson/archive/2005/10/10/SSIS-Nugget_3A00_-Verify-a-data-source-before-using-it.aspx" target="_blank"&gt;back in 2005&lt;/a&gt; however I don't think there's any harm in putting it out there again, especially given that: &lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;more people are now using SSIS &lt;/li&gt;

  &lt;li&gt;The previous code was VB.net &lt;/li&gt;

  &lt;li&gt;In the previous post the code was in a JPEG thus not copy/paste-able (god only knows why I did that) &lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=39373" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/jamie_thomson/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://sqlblog.com/blogs/jamie_thomson/archive/tags/sql+server+integration+services/default.aspx">sql server integration services</category><category domain="http://sqlblog.com/blogs/jamie_thomson/archive/tags/ssis/default.aspx">ssis</category></item><item><title>Lock variables in Script Task using C# [SSIS]</title><link>http://sqlblog.com/blogs/jamie_thomson/archive/2010/07/29/using-lockoneforread-with-c-ssis.aspx</link><pubDate>Thu, 29 Jul 2010 12:09:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:27396</guid><dc:creator>jamiet</dc:creator><slash:comments>2</slash:comments><comments>http://sqlblog.com/blogs/jamie_thomson/comments/27396.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/jamie_thomson/commentrss.aspx?PostID=27396</wfw:commentRss><wfw:comment>http://sqlblog.com/blogs/jamie_thomson/rsscomments.aspx?PostID=27396</wfw:comment><description>&lt;P&gt;If you have ever written code to lock variables inside a SSIS Script Task or Script Component then you will probably have written some VB.Net code that looks something like this:&lt;/P&gt;&lt;FONT color=black&gt;&lt;PRE&gt;&lt;HR&gt;&lt;BR&gt;    &lt;FONT color=#0000a0&gt;Public&lt;/FONT&gt; &lt;FONT color=#0000a0&gt;Sub&lt;/FONT&gt; Main()&lt;BR&gt;        &lt;FONT color=#0000a0&gt;Dim&lt;/FONT&gt; vars &lt;FONT color=#0000a0&gt;As&lt;/FONT&gt; Variables&lt;BR&gt;        &lt;FONT color=#0000a0&gt;Dim&lt;/FONT&gt; fireAgain &lt;FONT color=#0000a0&gt;As&lt;/FONT&gt; &lt;FONT color=#0000a0&gt;Boolean&lt;/FONT&gt; = &lt;FONT color=#0000a0&gt;True&lt;/FONT&gt;&lt;BR&gt;        Dts.VariableDispenser.LockOneForRead("VarName", vars)&lt;BR&gt;&lt;FONT color=#008000&gt;        'Do something with the value....&lt;/FONT&gt;&lt;BR&gt;        vars.Unlock()&lt;BR&gt;        Dts.TaskResult = ScriptResults.Success&lt;BR&gt;    &lt;FONT color=#0000a0&gt;End&lt;/FONT&gt; &lt;FONT color=#0000a0&gt;Sub&lt;/FONT&gt;&lt;BR&gt;&lt;/PRE&gt;&lt;/FONT&gt;
&lt;HR&gt;

&lt;P&gt;If you have then moved to SSIS2008 then you may want to do similar in C# so you would convert this code to be something like:&lt;/P&gt;
&lt;HR&gt;
&lt;B&gt;public&lt;/B&gt; &lt;B&gt;void&lt;/B&gt; &lt;FONT color=#2040a0&gt;Main&lt;/FONT&gt;&lt;FONT color=#4444ff&gt;(&lt;/FONT&gt;&lt;FONT color=#4444ff&gt;)&lt;/FONT&gt; &lt;FONT color=#4444ff&gt;&lt;B&gt;{&lt;/B&gt;&lt;/FONT&gt; &lt;FONT color=#2040a0&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Variables&lt;/FONT&gt; &lt;FONT color=#2040a0&gt;vars&lt;/FONT&gt;&lt;FONT color=#4444ff&gt;;&lt;/FONT&gt; &lt;B&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool&lt;/B&gt; &lt;FONT color=#2040a0&gt;fireAgain&lt;/FONT&gt; &lt;FONT color=#4444ff&gt;=&lt;/FONT&gt; &lt;B&gt;true&lt;/B&gt;&lt;FONT color=#4444ff&gt;;&lt;/FONT&gt; &lt;FONT color=#2040a0&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dts&lt;/FONT&gt;.&lt;FONT color=#2040a0&gt;VariableDispenser&lt;/FONT&gt;.&lt;FONT color=#2040a0&gt;LockOneForRead&lt;/FONT&gt;&lt;FONT color=#4444ff&gt;(&lt;/FONT&gt;&lt;FONT color=#008000&gt;"varName"&lt;/FONT&gt;, &lt;FONT color=#2040a0&gt;ref&lt;/FONT&gt; &lt;FONT color=#2040a0&gt;vars&lt;/FONT&gt;&lt;FONT color=#4444ff&gt;)&lt;/FONT&gt;&lt;FONT color=#4444ff&gt;;&lt;/FONT&gt; &lt;FONT color=#008000&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Do something with the value...&lt;/FONT&gt; &lt;FONT color=#2040a0&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; vars&lt;/FONT&gt;.&lt;FONT color=#2040a0&gt;Unlock&lt;/FONT&gt;&lt;FONT color=#4444ff&gt;(&lt;/FONT&gt;&lt;FONT color=#4444ff&gt;)&lt;/FONT&gt;&lt;FONT color=#4444ff&gt;;&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#2040a0&gt;Dts&lt;/FONT&gt;.&lt;FONT color=#2040a0&gt;TaskResult&lt;/FONT&gt; &lt;FONT color=#4444ff&gt;=&lt;/FONT&gt; &lt;FONT color=#4444ff&gt;(&lt;/FONT&gt;&lt;B&gt;int&lt;/B&gt;&lt;FONT color=#4444ff&gt;)&lt;/FONT&gt;&lt;FONT color=#2040a0&gt;ScriptResults&lt;/FONT&gt;.&lt;FONT color=#2040a0&gt;Success&lt;/FONT&gt;&lt;FONT color=#4444ff&gt;;&lt;/FONT&gt; &lt;FONT color=#4444ff&gt;&lt;B&gt;&lt;BR&gt;}&lt;/B&gt;&lt;/FONT&gt; 
&lt;HR&gt;
&lt;FONT color=#2040a0&gt;&lt;/FONT&gt;
&lt;P&gt;However, doing so will result in an error:&lt;/P&gt;
&lt;P&gt;&lt;FONT color=red&gt;Use of unassigned local variable 'vars'&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;What gives? Are you telling me the same logic doesn't work in C#? Actually the solution is pretty simple. Due to the way that C# and VB initialise their variables differently you simply have to set your variable to NULL as follows:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;HR&gt;
&lt;B&gt;public&lt;/B&gt; &lt;B&gt;void&lt;/B&gt; &lt;FONT color=#2040a0&gt;Main&lt;/FONT&gt;&lt;FONT color=#4444ff&gt;(&lt;/FONT&gt;&lt;FONT color=#4444ff&gt;)&lt;/FONT&gt; &lt;FONT color=#4444ff&gt;&lt;B&gt;{&lt;/B&gt;&lt;/FONT&gt; &lt;FONT color=#2040a0&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Variables&lt;/FONT&gt; &lt;FONT color=#2040a0&gt;vars = &lt;/FONT&gt;&lt;FONT color=#4444ff&gt;null&lt;/FONT&gt; &lt;FONT color=#4444ff&gt;;&lt;/FONT&gt; &lt;B&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool&lt;/B&gt; &lt;FONT color=#2040a0&gt;fireAgain&lt;/FONT&gt; &lt;FONT color=#4444ff&gt;=&lt;/FONT&gt; &lt;B&gt;true&lt;/B&gt;&lt;FONT color=#4444ff&gt;;&lt;/FONT&gt; &lt;FONT color=#2040a0&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dts&lt;/FONT&gt;.&lt;FONT color=#2040a0&gt;VariableDispenser&lt;/FONT&gt;.&lt;FONT color=#2040a0&gt;LockOneForRead&lt;/FONT&gt;&lt;FONT color=#4444ff&gt;(&lt;/FONT&gt;&lt;FONT color=#008000&gt;"varName"&lt;/FONT&gt;, &lt;FONT color=#2040a0&gt;ref&lt;/FONT&gt; &lt;FONT color=#2040a0&gt;vars&lt;/FONT&gt;&lt;FONT color=#4444ff&gt;)&lt;/FONT&gt;&lt;FONT color=#4444ff&gt;;&lt;/FONT&gt; &lt;FONT color=#008000&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Do something with the value...&lt;/FONT&gt; &lt;FONT color=#2040a0&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; vars&lt;/FONT&gt;.&lt;FONT color=#2040a0&gt;Unlock&lt;/FONT&gt;&lt;FONT color=#4444ff&gt;(&lt;/FONT&gt;&lt;FONT color=#4444ff&gt;)&lt;/FONT&gt;&lt;FONT color=#4444ff&gt;;&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#2040a0&gt;Dts&lt;/FONT&gt;.&lt;FONT color=#2040a0&gt;TaskResult&lt;/FONT&gt; &lt;FONT color=#4444ff&gt;=&lt;/FONT&gt; &lt;FONT color=#4444ff&gt;(&lt;/FONT&gt;&lt;B&gt;int&lt;/B&gt;&lt;FONT color=#4444ff&gt;)&lt;/FONT&gt;&lt;FONT color=#2040a0&gt;ScriptResults&lt;/FONT&gt;.&lt;FONT color=#2040a0&gt;Success&lt;/FONT&gt;&lt;FONT color=#4444ff&gt;;&lt;/FONT&gt; &lt;FONT color=#4444ff&gt;&lt;B&gt;&lt;BR&gt;}&lt;/B&gt;&lt;/FONT&gt; 
&lt;HR&gt;
Easy when you know how!!! 
&lt;P&gt;&lt;A href="http://twitter.com/jamiet"&gt;@Jamiet&lt;/A&gt; &lt;BR&gt;&lt;/P&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=27396" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/jamie_thomson/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://sqlblog.com/blogs/jamie_thomson/archive/tags/Script+Task/default.aspx">Script Task</category><category domain="http://sqlblog.com/blogs/jamie_thomson/archive/tags/sql+server+integration+services/default.aspx">sql server integration services</category><category domain="http://sqlblog.com/blogs/jamie_thomson/archive/tags/ssis/default.aspx">ssis</category></item></channel></rss>