[英]How do I pass DTEXEC utility command line arguments to process.start using C# syntax?
我必须通过ASP.NET代码将参数传递给DTEXEC实用程序。 我正在使用process.start()
方法来触发SSIS包执行。
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;"
上述命令行参数是在通过DTEXEC实用程序手动执行程序包时生成的。 但是,我需要使用C#通过此命令行到达ASP.NET中的process.start()
方法。
如何在C#字符串语句中表示上述命令行? 换句话说,如何使用@
字符转义特殊字符并将有效的语句传递给process.start()
?
逐字字符串文字可能最容易用于对此类字符串进行硬编码。
您只需要将每个内部"
加倍即可:
@"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;""";
随着“正规军”的字符串,则需要每个逃生"
和\\
在原来有\\
在他们面前。
冒着失去主题的风险,与调用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();
我没有测试这些,但是下面的应该做。
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;\"";
如果你去老式的路线就像我上面显示,你只需要逃避\\
(因为这是你的逃生字符)和"
与\\
在字符串中的任何地方。如果你使用版本batim喜欢对方的回答表明,它将更易于阅读和维护。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.