現在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)