5

私は何日も解決策を探していましたが、まだ解決策を見つけることができないようです。スクリプトコンポーネントで接続を取得する際に問題が発生しました。データベースに挿入する前に、使用するIDを取得するためにデータベースにクエリを実行する必要があります。

public override void AcquireConnections(object Transaction)
{
    connMgr = base.Connections.Connection;
    conn =  (SqlConnection)connMgr.AcquireConnection(null);
}

ここで例外が発生します。

System.InvalidCastException: Unable to cast COM object of type 'System.__ComObject' to class type 'System.Data.SqlClient.SqlConnection'. Instances of types that represent COM components cannot be cast to types that do not represent COM components; however they can be cast to interfaces as long as the underlying COM component supports QueryInterface calls for the IID of the interface.

解決策はありますか?

4

2 に答える 2

7

スクリプトコンポーネントでこれを実行できるようにしたい場合:

  1. スクリプトコンポーネントをダブルクリックして、「スクリプト変換エディタ」を開きます
  2. 「接続マネージャ」リスト項目をクリックします。
  3. 新しい接続マネージャーを追加します。既存のADO.NET接続マネージャーを選択します。
  4. 「スクリプト」リスト項目をクリックしてから、「スクリプトの編集...」ボタンをクリックします。

スクリプト内で次のようなことを行うことができます。

using (SqlConnection connection = this.Connections.Connection.AcquireConnection(null) as SqlConnection)
{
    using (SqlCommand command = connection.CreateCommand())
    {
        command.CommandText = "SELECT [Value] FROM dbo.MyTable";
        command.CommandType = CommandType.Text;

        using (SqlDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                ProfanityWords.Add(reader.GetValue(0).ToString());
            }
        }
    }

    this.Connections.Connection.ReleaseConnection(connection);
}

ここに画像の説明を入力してください

于 2014-10-27T05:25:02.037 に答える
2

ADO.NET接続マネージャーを作成し、コードを参照して、にキャストを入力する必要がありSqlConnectionます。SSISパッケージにADO.NET接続がない場合は、TypeCast例外が発生します。SqlConnectionを使用する場合は、次の手順を使用する必要があります。

  1. ADO.NET接続を作成します。
  2. コードで次の行を使用します。

    var connObj = Dts.Connections["ADO.NETConnectionName"].AcquireConnection(null);
    
    var sqlConn = (SqlConnection)connObj;
    
  3. SQL接続が完了したら。次のコードを使用して、接続を閉じたり解放したりします。

    Dts.Connections["ADO.NETConnectionName"].ReleaseConnection(connObj);
    

お役に立てれば。

于 2012-11-27T08:51:05.790 に答える