0

ASP.NET コードを介して DTEXEC ユーティリティにパラメーターを渡す必要があります。メソッドを使用してprocess.start()、SSIS パッケージの実行をトリガーしています。

文字列 1

dtexec /file C:\ssis\pkg1.dtsx 
       /conn "MyConnectionManager";"\"Data Source=localhost\TestSQL2008R2;Initial Catalog=ConnDB;Integrated Security=SSPI;\""

文字列 2

/file C:\ssis\pkg1.dtsx 
/conn "MyConnectionManager;Data Source=localhost\TestSQL2008R2;Initial Catalog=ConnDB;Integrated Security=SSPI;"

上記のコマンド ライン引数は、DTEXEC ユーティリティを使用してパッケージを手動で実行しているときに生成されます。process.start()ただし、 C# を使用して ASP.NET でメソッドを実行するには、このコマンド ラインを通過する必要があります。

上記のコマンド ラインを C# 文字列ステートメント内で表現するにはどうすればよいですか? @つまり、 character を使用して特殊文字をエスケープし、有効なステートメントをに渡すにはどうすればよいprocess.start()ですか?

4

3 に答える 3

2

このような文字列をハードコーディングするには、おそらく、そのままの文字列リテラルを使用するのが最も簡単です。

すべての inner を 2 倍にするだけです"

@"dtexec /file C:\ssis\pkg1.dtsx /conn ""MyConnectionManager"";""\""Data Source=localhost\TestSQL2008R2;Initial Catalog=ConnDB;Integrated Security=SSPI;\""""";

と:

@"/file C:\ssis\pkg1.dtsx /conn ""MyConnectionManager;Data Source=localhost\TestSQL2008R2;Initial Catalog=ConnDB;Integrated Security=SSPI;""";

"「通常の」文字列では、それぞれをエスケープ\し、元の文字列の前に aを付ける必要があり\ます。

于 2013-02-06T20:28:30.293 に答える
1

トピックから外れることに対する反対票のリスクがありますが、dtexec実行可能ファイルを呼び出すよりも優れたメカニズムがあります。.netを使用しているため、既存のオブジェクトモデルを使用します。これは、dtexecによって提供される限定的な抽象化よりもはるかに強力です。

コードの大まかなカットは次のようになります

string packagePath = @"C:\ssis\pkg1.dtsx";
string connectionString = @"Data Source=localhost\TestSQL2008R2;Initial Catalog=ConnDB;Integrated Security=SSPI;"
Application app = new Application();
Package pkg = null;
pkg = app.LoadPackage(packagePath, null);
pkg.Connections["MyConnectionManager"].ConnectionString = connectionString;
pkg.Execute();
于 2013-02-06T21:02:13.217 に答える
0

私はこれらをテストしませんでしたが、次のようにする必要があります。

var string1 = 
"dtexec /file C:\\ssis\\pkg1.dtsx /conn \"MyConnectionManager\";\"\\\"Data Source=localhost\\TestSQL2008R2;Initial Catalog=ConnDB;Integrated Security=SSPI;\\\"\"";

var string2 = "dtexec /file C:\\ssis\\pkg1.dtsx /conn \"MyConnectionManager;Data Source=localhost\\TestSQL2008R2;Initial Catalog=ConnDB;Integrated Security=SSPI;\"";

上に示したような昔ながらのルートをたどる場合は、文字列の任意の場所でエスケープする必要があります\(これがエスケープ文字であるため) 。他の回答が示唆するように ver batim を使用すると、読みやすく、維持しやすくなります。"\

于 2013-02-06T20:29:53.217 に答える