我必须通过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()
?
答案 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,那么它将更容易阅读和维护。