2017-09-05 21 views
1

DTUTILを使用してC#プログラムでSSISパッケージをあるSQLサーバーから別のSQLサーバーにコピーしています。パッケージはMSDBにあります。C#でSSISパッケージ名を取得

string dtutilCmd = "/c DTUTIL /SOURCESERVER " + sourceServer + " /SQL " + myPackage + " /DestServer " + destServer + " /COPY " + myPackage; 

System.Diagnostics.Process process = new System.Diagnostics.Process(); 
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
startInfo.FileName = "cmd.exe"; 
startInfo.Arguments = dtutilCmd; 
process.StartInfo = startInfo; 
process.Start(); 

dtutilCmd文字列の変数はすべて文字列です。問題は、ユーザーがパッケージ名を入力して、大文字と小文字を間違える可能性がある場合です。 MYPACKAGEと書くと、MYPACKAGEというデプロイメントが実際に存在していても、元のサーバーに保存する場合はMyPackageとなります。

だから私は何とかパッケージ名をつかみ、それをdtutilCmd文字列の最後の部分に入れたいと思っています。

答えて

1

「アプリケーション」クラスのMicrosoft.Dts.Runtime名前空間を使用するだけです。それを使用して接続を確立し、MSDBからパッケージ情報を取得します。 Enumerating Available Packages Programmatically

+0

これが機能しました。将来の人にとって、コードは完全には機能しません。かなり微調整が必​​要ですが、解決策は正当です。 – coinbird

0

ispacにインテグレーションサービスカタログを抽出 - ここ

は、プログラム的にそれをやって行く方法の詳細を提供するリンクがあります。 SSDTで開き、新しいサーバーに展開します。ずっと簡単。

+0

これはなぜマイナスになるのですか? DTUTILを使用してサーバ間でssisパッケージをコピーする必要はありません。 – plaidDK

+0

私はあなたにdownvoteをしませんでしたが、あなたの解決策が何を意味するかもわかりません。 DTUTILを使用してサーバー間でパッケージをコピーすることは、C#プログラムを使用してそれを行う方法を知っている唯一の方法です。私のプログラムは多くのことをするので、SSISパッケージを展開するには、C#プログラム内で100%実行する必要があります。 SSMSを開いたり、サイドに何も表示しません。 – coinbird

関連する問題