繁体   English   中英

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

[英]How do I pass DTEXEC utility command line arguments to process.start using C# syntax?

我必须通过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实用程序手动执行程序包时生成的。 但是,我需要使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM