2012-08-08 86 views
6

我有寫入到SSIS腳本任務,下面的代碼連接到我的SQL數據庫:SSIS連接錯誤

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

cm = Dts.Connections["QUAHILSQ03"]; 

sqlConn = (System.Data.SqlClient.SqlConnection)cm.AcquireConnection(Dts.Transaction); 

但是這條線:

sqlConn = (System.Data.SqlClient.SqlConnection)cm.AcquireConnection(Dts.Transaction); 

返回以下異常:

{「無法將類型爲'System .__ ComObject'的COM對象轉換爲類類型'System.Data.SqlClient.SqlConnection'。表示COM組件類型的實例不能轉換爲不包含類型的類型代表COM組件;然而,他們可以投,只要基礎COM組件支持的QueryInterface調用該接口的IID來對接。「} {System.Exception的} System.InvalidCastException

回答

12

很簡單的解決辦法:我創造了QUAHILSQ03連接管理器作爲一個OLE DB連接。簡單地將它改爲ADO.NET,我的代碼運行良好。

6

在我看來,您使用的是OLEDB連接。獲取所以,你所得到的是錯誤的OLEDB連接管理器連接方法返回一個COM對象

試試這個:

ConnectionManager cm = Dts.Connections["QUAHILSQ03"]; 
    IDTSConnectionManagerDatabaseParameters100 cmParams = cm.InnerObject 
    as IDTSConnectionManagerDatabaseParameters100; 
    OleDbConnection conn = cmParams.GetConnectionForSchema() as OleDbConnection; 

您需要使用Microsoft.SqlServer.Dts.Runtime.Wrapper命名空間上面的方法,你可以不保留transaction

更多細節請參考this文章

+1

如果您選擇了[ado.net](http://toddmcdermid.blogspot.com/2011/05/use-connections-properly-in-ssis-script.html)路線,Todd McDermid的帖子應該幫助你 – billinkc 2012-08-09 02:21:37