6

ssis パッケージを作成していますが、スクリプト コンポーネント内で既存の OleDbConnection を使用したいと考えています。これが私のコードです:

public override void AcquireConnections(object Transaction)
{
    base.AcquireConnections(Transaction);
    cm = this.Connections.Connection;
    con = (OleDbConnection)cm.AcquireConnection(Transaction);
    MessageBox.Show(con.ToString());

}

BIDS を閉じると、「System.InvalidCastException: タイプ 'System.__ComObject' の COM オブジェクトをクラス タイプ 'System.Data.OleDb.OleDbConnection' にキャストできません。 COM コンポーネントを表さない型にキャストしますが、基になる COM コンポーネントがインターフェイスの IID に対する QueryInterface 呼び出しをサポートしている限り、インターフェイスにキャストできます。」

同じコードは、Ado.Net 接続でも正常に機能します。ここで OleDbConnection を使用できますか、それともスクリプト コンポーネントは Ado.Net のみをサポートしていますか?

前もって感謝します。

4

3 に答える 3

12

で述べたようにMSDN

スクリプト タスクのマネージ コードで、OLE DB 接続マネージャーや Excel 接続マネージャーなど、アンマネージ オブジェクトを返す接続マネージャーの AcquireConnection メソッドを呼び出すことはできません。

メソッドADO.NETを使用する場合は、接続マネージャーを使用する必要がありますAquire Connection

OLEDB接続を使用するにはMicrosoft.SqlServer.DTSRuntimeWrap、以下のコードへの参照を追加して試してください

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

MSDN リンク

于 2013-04-03T16:22:46.220 に答える
3

ありがとうプラビーン。

あなたのリンクで関連する部分を見つけました:

「アンマネージ オブジェクトを返す接続マネージャーの AcquireConnection メソッドを呼び出す必要がある場合は、ADO.NET 接続マネージャーを使用してください。OLE DB プロバイダーを使用するように ADO.NET 接続マネージャーを構成すると、.NET Framework を使用して接続します。 OLE DB のデータ プロバイダー。この場合、AcquireConnection メソッドは、管理されていないオブジェクトではなく、System.Data.OleDb.OleDbConnection を返します。Excel データ ソースで使用する ADO.NET 接続マネージャーを構成するには、Microsoft OLE DB プロバイダーを選択します。 Jet の場合、Excel ファイルを指定し、[接続マネージャー] ダイアログ ボックスの [すべて] ページで [拡張プロパティ] の値として Excel 8.0 (Excel 97 以降の場合) を入力します。

ありがとう!

于 2013-04-03T18:35:38.603 に答える