0

現在2つのステップであるプロセスを自動化しようとしています。まず、(VS 2010)C#に、ベンダーから価格カタログを取得し、データをマッサージして.txtファイルを作成するアプリがあります。次に、(SQL Server 2005)データベースのテーブルを空にして.txtファイルから再入力するSSISプロジェクト(VS 2008)があります。

アプリからSSISプロジェクトを呼び出して、これらの手順を組み合わせようとしています。マッサージされたデータをデータベースに取り込むためのより良い方法があれば、私は提案を受け入れます。

私が使用している方法は次のとおりです。

private static void UpdateVendorTable()
{
    string pkgLocation;
    Package pkg;
    Application app;
    DTSExecResult pkgResults;

    pkgLocation = appConfig.Default.DataSSIS; // C:\Projects\Vendor\vendor.dtsx
    app = new Application();
    pkg = app.LoadPackage(pkgLocation, null);
    pkgResults = pkg.Execute();
}

ただし、「pkgLocation = appConfig.Default.DataSSIS;」の場合、以下に示すエラーが返されます。ラインに到達しました。

エラー0xC0011008「XMLからのロード中にエラーが発生しました。詳細なエラー情報を格納できるEventsオブジェクトが渡されなかったため、この問題についてこれ以上詳細なエラー情報を指定できません。」が原因でパッケージをロードできませんでした。これは、CPackage::LoadFromXMLが失敗した場合に発生します。この例外にはInnerExceptionがあります:System.Runtime.InteropServices.COMException(0xC0011008):エラー0xC0011008 "XMLからの読み込み中にエラーが発生しました。イベントオブジェクトが渡されなかったため、この問題の詳細なエラー情報を指定できません。詳細なエラー情報を保存できます。」これは、CPackage::LoadFromXMLが失敗した場合に発生します。

Microsoft.SqlServer.Dts.Runtime.Wrapper.ApplicationClass.LoadPackage(String FileName、Boolean loadNeutral、IDTSEvents90 pEvents)at Microsoft.SqlServer.Dts.Runtime.Application.LoadPackage(String fileName、IDTSEvents events、Boolean loadNeutral)

4

1 に答える 1

1

私が最終的に落ち着いた答えは、「SSIS の代わりに SqlBulkCopy を使用する」というものでした。すべてのデータを含むオブジェクトを既に作成していたので、SSIS がデータベースを更新するために使用するテキスト ファイルに書き込むのではなく、単にデータベースに一括コピーするのが理にかなっています。

この素晴らしい記事を見つけましたhttp://blogs.msdn.com/b/nikhilsi/archive/2008/06/11/bulk-insert-into-sql-from-c-app.aspxすべての手順を説明し、素晴らしく働きました。

于 2012-12-18T14:23:31.903 に答える