1

環境の説明

asp.net から実行する SSIS タスクがあり、パッケージは UNC パスを介して Excel ファイルからデータを取得し、そのデータを SQL Server データベースに配置します。SSIS をファイル システムに展開しました。これには Windows 認証データベース接続があり、IIS ユーザーにはデータベース アクセスがあります。Web アプリケーションをホストするために使用した AppPoolUser としてログインし、問題のファイルを開いたり変更したりして、これらの基本的なアクセス許可を取得できます。Web アプリは x86 でコンパイルされています。

それが機能する場合:

  • 私のユーザーまたは appPool ユーザーの下のサーバー上のブラウザーで Web アプリから実行する場合
  • BIDS を実行しているサーバーに自分としてログインした場合
  • BIDS を実行しているサーバーに AppPoolUser としてログインした場合
  • AppPoolUser を使用してサーバー上のスケジュールされたタスクから実行する場合

うまくいかないとき:

  • IIS が asp.net アプリをホストしているマシンではなく、クライアント ブラウザーから実行する場合

私の質問

クライアントとサーバーの違いと、それを機能させるにはどうすればよいですか? Web アプリを実行すると、すべての接続が AppPool ユーザーを経由するので、含まれるどのマシン サーバーでも同じように動作するはずだという印象を受けましたか?

エラーがクライアント ブラウザに返される

SSIS エラー コード DTS_E_OLEDBERROR。OLE DB エラーが発生しました。エラー コード: 0x80004005。OLE DB レコードが利用可能です。ソース: "Microsoft Office Access データベース エンジン" Hresult: 0x80004005 説明: "Microsoft Office Access データベース エンジンは、ファイル '\\myserver\My folder\myfile.xlsx' を開いたり、書き込んだりできません。別のユーザーによって既に排他的に開かれています。または、そのデータを表示および書き込む権限が必要です。」SSIS エラー コード DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER。接続マネージャー "MyExcelFileConnection" への AcquireConnection メソッドの呼び出しが、エラー コード 0xC0202009 で失敗しました。これより前に、AcquireConnection メソッドの呼び出しが失敗した理由に関する詳細情報を含むエラー メッセージが投稿される場合があります。コンポーネント "Excel ソース" (1) は検証に失敗し、エラー コード 0xC020801C を返しました。1 つ以上のコンポーネントが検証に失敗しました。タスクの検証中にエラーが発生しました。

C# SSIS パッケージを実行するコード

        string pkgLocation;
        Package pkg;
        Application app;
        DTSExecResult pkgResults;
        string result = string.Empty;
        string dtsErrors = string.Empty;

        try
        {
            pkgLocation = packagePath;
            app = new Application();
            pkg = app.LoadPackage(pkgLocation, null);
            pkgResults = pkg.Execute();

            foreach (DtsError local_DtsError in pkg.Errors)
                dtsErrors += " " + local_DtsError.Description;

            result = pkgResults.ToString();
        }
        catch (Exception exception)
        {
            result = exception.Message;
        }
4

0 に答える 0