7

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コンポーネントがインターフェイスのIIDに対するQueryInterface呼び出しをサポートしている限り、インターフェイスにキャストします。 "} System.Exception {System.InvalidCastException}

4

2 に答える 2

14

非常に簡単な修正:QUAHILSQ03接続マネージャーをOLEDB接続として作成しました。ADO.NETに変更するだけで、コードは正常に機能しました。

于 2012-08-09T15:10:37.060 に答える
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

詳細については、この記事を参照してください

于 2012-08-09T02:01:57.837 に答える