2017-12-27 32 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 기능을 잘 활용하는 업데이트 된 코드

시작하려면 아래 코드를 참조하십시오. SSIS 2012 및 이후 버전의 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 코드는 대부분의 경우 확인되어야합니다. 반복적으로 연결을 열고 릴리스하지 않을 때 문제가 발생할 수 있습니다. 연결 풀 등을 실행할 수도 있습니다. try- finally 블록으로 내부를 래핑하여 ReleaseConnection 실행을 보장합니다.