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# 字符串语句中表示上述命令行?换句话说,我如何通过使用字符来转义特殊字符@并将有效语句传递给process.start()

4

3 回答 3

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 中,请使用现有的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();
于 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 回答