2016-05-19 7 views
0

レコードセットとスクリプトコンポーネントに問題がありましたので、私はその状況を説明します。SSIS - スクリプトでオブジェクト変数(レコードセット)を使用する:一度だけ

私の最初のステップでは、SQLから1つのテーブルを読み取り、結果をRecordset Destinationに格納し、このレコードセットを変数に保存するData Flow Taskを作成しました。私の第2ステップで

、私はこのコンポーネントにデータフロータスクをしました:

  • - 私は
  • Bファイルフラットソースと.csvファイルをロードします - 私はスクリプトコンポーネント
  • でデータを修正します
  • C - 私は、私は、各行のイベントを上昇し、私はこの問題は、トンで発生したスクリプトタスク で広告イベントハンドラでこのイベントをキャッチする工程b OLE DB先

とSQLでデータを保存します彼のスクリプトタスク。これはコードです:

public void Main() 
{ 
    ... 
    string messaggio = GetMessaggio(connection, EventNumber); 
    ... 
} 

private string GetMessaggio(string eventNumber) 
{ 
    using (var adapt = new OleDbDataAdapter()) 
    using (var dt = new DataTable()) 
    { 
     adapt.Fill(dt, Dts.Variables["User::RS_EventType"].Value); 
     return dt.AsEnumerable() 
        .Where(r => r.Field<int>("ev_number").ToString() == eventNumber) 
        .Select(r => r.Field<string>("ev_message")) 
        .FirstOrDefault() ?? "ND"; 
    } 
} 

初めての場合、データテーブルには正しいレコードがロードされますが、これは最初に発生します。 メソッドが再度呼び出されると、Dts.Variables ["User :: RS_EventType"]。値はまだ有効ですが、adapt.Fillはデータテーブルを埋めることはありません。

何が問題なのですか?私は解決策は、この記事を読んでい

+0

あなたは終わりを示すために、あなたの文ブロックの最後でdt.Closeを()やってみました次のレコードはdt – Caz1224

+0

dt.Close()の新しいインスタンスを持つでしょうか?この方法はどこですか? –

答えて

0

SSIS Script Task - Reading RecordSet object in a loop is failing

今、これはコードです:

private string GetMessaggio(string eventNumber) 
{ 
    using (var adapt = new OleDbDataAdapter()) 
    using (var dt = new DataTable()) 
    { 
     var stm = new ADODB.Stream(); 
     var rsCopy = new ADODB.Recordset(); 
     var rs = ((ADODB.Recordset)Dts.Variables["User::RS_EventType"].Value).Clone(); 

     rs.Save(stm); 
     rsCopy.Open(stm); 

     adapt.Fill(dt, rsCopy); 

     rs.Close(); 
     stm.Close(); 
     rsCopy.Close(); 
     Marshal.ReleaseComObject(stm); 
     Marshal.ReleaseComObject(rsCopy); 
     Marshal.ReleaseComObject(rs); 

     return dt.AsEnumerable() 
        .Where(r => r.Field<int>("ev_number").ToString() == eventNumber) 
        .Select(r => r.Field<string>("ev_message")) 
        .FirstOrDefault() ?? "ND"; 
    } 
} 
関連する問題