2009-07-28 33 views
3

シンプルなSSISパッケージを実行しようとしています(外部フォルダからSQL 2005テーブルにデータをコピーします)。 Asp.net 2.0アプリケーションからこのパッケージを実行したいと思います。助言がありますか?Asp.netアプリケーションからSSISを実行

私は多くの異なったブログやウェブサイトを検索しましたが、これらの方法のすべてが(通常あるため、セキュリティ上の問題の)故障につながる

dtexec/FILE「パッケージの名前」など

EXECマスター.. xp_cmdshellを@cmd(おそらく非常に悪いアイデア)

sp_start_job

app.LoadPackage(@ "\サーバー名\共有名\ Package1.dtsx"、null)の

お手数をおかけしていただきありがとうございます。

+0

この回答もお伝えしたいと思います。 – NotMe

+0

ワタググチとエリック、お世話になりました。あなたのソリューションはおそらくより強く、より強固ですが、私たちの設定に合わせて、私は以下のことを行いました。 これは私が実行する方法です: – LizardJack

+0

私のdbaはsp_start_jobタスク(特定のドメインアカウントを通じて行われた)を実行する権限を私に与えなければなりませんでした。 私は彼がまた私に次の役割に権利を与えなければならなかったと信じて: SQLAgentOperatorRole SQLAgentReaderRole SQLAgentUserRole 私は、.NET 2.0を経由して、それを実行するには、次のマイクロソフトのコードを使用: http://msdn.microsoft.com/ ja-us/library/ms403355.aspx 私はコードを逐語的に受け取り、自分の仕事の名前を変更するだけで済みました。 jobParameter.Value = "RunSSISPackage" – LizardJack

答えて

5

あなたがリストしたのは、半分の正しい答えのホッジポッジです。

SSISパッケージを起動するには、さまざまな方法があります。しかし、おそらく最も良い方法はsp_start_jobです。さて、これはあなたのSSISパッケージを実行するcreated a jobを意味します。

多くの場合、この子犬は身分証明書の問題のために失敗します。つまり、実行能力にあまり適していないSQL Serverエージェントアカウント(別名LOCAL SYSTEM)として血まみれのものを実行しようとしています。したがって、create a Credentialに、次にa Proxyにジョブを実行する必要があります。そのため、何をする必要がthuslyです:

CREATE CREDENTIAL MyCred WITH IDENTITY 'CORP\MyUser', SECRET = '<PassGoesHere>' 
GO 
sp_add_proxy @proxy_name='MyProxy', @enabled = 1, @credential = 'MyCred' 
GO 
sp_grant_proxy_to_subsystem @proxy_name = 'MyProxy', @subsystem_id = 3 
GO 
sp_add_job @job_name = 'MyJob', @enabled = 1 
GO 
sp_add_jobstep 
    @job_name = 'MyJob', 
    @step_name = 'Run SSIS Package', 
    @subsystem = 'CMDEXEC', 
    @command = 'dtexec /F C:\Path\To\Package.dtsx', 
    @proxy_name = 'MyProxy' 

意味のあるドキュメント:

  1. CREATE CREDENTIAL
  2. sp_add_proxy
  3. sp_grant_proxy_to_subsystem
  4. sp_add_job
  5. sp_add_jobstep
+0

Eric、お返事ありがとうございました。この問題で 私はおそらくこれを言及していたはずですが、私はSSMSにアクセスできません。私はそれがSQL 2005がどのように設定されたのかによると信じていましたが、おそらくDBAはそれを完全にロックダウンしました。 SQL 2000では、 "データ変換サービス"と "管理"/"SQL Serverエージェント"に行くことができます。私はSQL 2005でそれに似たものはありません。 – LizardJack

+0

@Jack:それを純粋なSQLに変更しました。楽しい。 – Eric

+0

ありがとう、エリック。私はこれを間違いなく試みます!あなたにポイントを与える方法はありますか? (私は以前このサイトを使ったことがない)。 – LizardJack

1

サーバー側のASP.NETアプリケーションを使用すると、他の.NETアプリケーションとよく似ています。 SSISパッケージ(SQLServer 2008)を実行しているコードサンプルがここにありますが、このプロジェクトではNDAを使用しているためコピーできません。

私は、Microsoft.SqlServer.Dts.Runtime.Wrapperという名前空間を使用していますが、パッケージとアプリケーションとDTSExecResult列挙型のインターフェイスを使用していると伝えます。

私たちはデータベースにExcelシートをインポートしています。

編集: ここでは、我々はここでそれを行う方法の概要は次のとおりです。 我々は、我々は我々のシステムにインポートするデータを含むExcelシートを持っています。私たちのシステムは、ASP.NET 3.5/Castle Project/SQLServer 2008 powered。 ユーザーが新しいシートをシステムにアップロードすると、それをフォルダに保存します。「c:\ UPLOAD」としましょう。アクションがトリガされるので、SSISパッケージを呼び出してSQL Server 2008にインポートします。我々は(C#)と、それを実装する方法

:私は前に述べたように

Package package; 
Application app; 
DTSExecuteResult packageResult; 

String packagePath = ""; // You have to get your physical path to your package. 

app = new Application(); 
app.PackagePassword = "password"; // We have it here.. 
package = (Package)app.LoadPackage(packagePath, true, null); 
packageResult = package.Execute(); 

をすべてのこれらのクラスは、同じ名前空間、Microsoft.SqlServer.Dts.Runtime.Wrapperからです。

アクセスに問題がある場合は、アクセス許可を追加する必要があるため、SSISのパッケージを実行するためだけに権限を昇格するか、新しいものを作成するようにDBAに依頼することをお勧めします。

希望すると、これが役立ちます。

+0

ご協力ありがとうございます。私は "Microsoft.SqlServer.Dts.Runtime"クラスを使用しようとしていますが、おそらくラッパーを追加すると役立ちます。 – LizardJack

+0

こんにちは、あなたがこれをどのように動作させるかについて、これ以上の洞察を提供できるかどうか不思議です。エリックは私を助けてくれましたが、私は彼の提案を使うための適切な許可を持っていません。ありがとう! – LizardJack

+0

ええ、私はそれを見てみましょう、多分あなたに "新しい"例を提供します。すぐに私の答えを編集する。 – wtaniguchi

関連する問題