2017-12-27 21 views
1

あなたはインターネットを検索する場合またはSO connect to SQL database inside Script Task in SSISする方法を次のような.NETのv1.1ishコードあります:私は探しています近代的な方法SSIS 2012年にスクリプトタスク内のSQL Serverに接続し、後で

ConnectionManager cm; 
System.Data.SqlClient.SqlConnection sqlConn; 
System.Data.SqlClient.SqlCommand sqlComm; 

cm = Dts.Connections["ADO.NET.SqlDB"];  
sqlConn = (System.Data.SqlClient.SqlConnection)cm.AcquireConnection(Dts.Transaction); 

sqlComm = new System.Data.SqlClient.SqlCommand("your SQL Command", sqlConn); 
sqlComm.ExecuteNonQuery(); 

cm.ReleaseConnection(sqlConn); 

を後で導入された.NETの機能を有効に活用する最新のコード。

まず、以下のコードについて説明します。これは2012年以降のSSISのScript Task内でSQL Serverに接続するための現在の推奨方法ですか、ここで何か不足していますか?

ConnectionManager cm = Dts.Connections["ADO.NET.SqlDB"]; 
using (var sqlConn = (SqlConnection)cm.AcquireConnection(Dts.Transaction)) 
{ 
    if (sqlConn.State != ConnectionState.Open) 
     sqlConn.Open(); 

    using (var sqlComm = new SqlCommand(
     String.Format("UPDATE myTab SET Processed = 4 where ID = '{0}'", 
     idNumber), sqlConn)) 
    { 
     return sqlComm.ExecuteNonQuery(); 
    } 
} 

ReleaseConnection()はまだ必要ですか? sqlConn.Open()は本当にSSISコンテキストで必要ですか?

+0

この特定のコードでは、 'sqlConn'は決してまだ開いていません。しかし、それは傷つくことはありません。私はこれがちょっとした事例だと思いますか?これらの例では、スクリプトタスクを使用する理由はなく、代わりにSQLタスクを使用することができます –

+0

もちろん、それは単なる例です。選択、更新、入力などを行う多くの機能を想像してください。 – wp78de

+0

私の経験では、これはSSISスクリプトタスクよりもストアドプロシージャで実装するほうが優れています。 –

答えて

1

まあ、using構造では、変数の処理を自動化し、より適切に処理することができます。ただし、sqlConnは単純なクラスではなく、ConnectionManagerインスタンスです。使用を開始すると、AcquireConnectionに電話をかけます(終了電話ReleaseConnection)。 ReleaseConnectionは、このデータソースに固有のハウスキーピングを実行することがあります。 ConnectionManagerの実装によっては、ReleaseConnectionが呼び出されたかどうかを判断して呼び出すことができます。

私の理解では、usingのコードは大抵の場合OKです。繰り返し接続を開いて解放しないと問題が発生する可能性があります。接続プールなどを実行している可能性があります。に内部をラップして、最後にブロックを実行してReleaseConnectionの実行を確実にします。

関連する問題