如何使用C#语法将DTEXEC实用程序命令行参数传递给process.start?

时间:2013-02-06 20:25:12

标签: c# asp.net ssis

我必须通过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;\""

String 2

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

通过DTEXEC实用程序手动执行包时会生成上述命令行参数。但是,我需要使用C#将此命令行传递给ASP.NET中的process.start()方法。

如何在C#字符串语句中表示上述命令行?换句话说,如何使用 @ 字符转义特殊字符并将有效语句传递给process.start()

3 个答案:

答案 0 :(得分: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;""";

使用“常规”字符串,您需要使用"转义原始中的每个\\

答案 1 :(得分:1)

冒着偏离主题的风险,你有一个比调用dtexec可执行文件更好的机制。由于您使用的是.net,请使用现有的object model比通过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();

答案 2 :(得分: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,那么它将更容易阅读和维护。