【发布时间】:2009-12-08 15:22:29
【问题描述】:
App.Config 文件内容:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="ConnectionString"
value="Server=ADVDSQLMGA;User ID=ImporterApp;Password=!mp0rt3rApp;Database=id0405Moxy52"
/>
<add key="DTS_PackageName"
value="BlockImportNEW"/>
<add key="DTS_PackagePathAndFileName"
value="\\computername\foldername\folder1\folder2\folder3\filename.dts"/>
<add key="DTS_PackageGUID"
value="{C22A80D9-7613-43AF-939C-3C04AD7D848A}"/>
<add key="DTS_ImportSourcePath"
value="C:\foldername"/>
<add key="DTS_ImportFileConnection"
value="'filename.txt';'';'0'"/>
<add key="DTS_ImportFileName"
value="filename.txt"/>
<add key="DTS_ImportWorkingPath"
value="\\computername\foldername\folder1\folder2"/>
<add key="DTS_ImportWorkingPathAndFileName"
value="\\computername\foldername\folder1\folder2\filename.txt"/>
<add key="DTS_DestinationServerName"
value="computername"/>
<add key="DTS_DestinationDatabase"
value="databasename"/>
<add key="DTS_DestinationTable"
value="databasename.dbo.tablename"/>
<add key="DTS_DestinationUserName"
value="username"/>
<add key="DTS_DestinationPassword"
value="password"/>
</appSettings>
</configuration>
代码:
string DTS_PackageName = ConfigurationSettings.AppSettings["DTS_PackageName"];
string DTS_PackagePathAndFileName = ConfigurationSettings.AppSettings["DTS_PackagePathAndFileName"];
string DTS_PackageGUID = ConfigurationSettings.AppSettings["DTS_PackageGUID"];
string DTS_ImportSourcePath = ConfigurationSettings.AppSettings["DTS_ImportSourcePath"];
string DTS_ImportFileConnection = ConfigurationSettings.AppSettings["DTS_ImportFileConnection"];
string DTS_ImportFileName = ConfigurationSettings.AppSettings["DTS_ImportFileName"];
string DTS_ImportWorkingPath = ConfigurationSettings.AppSettings["DTS_ImportWorkingPath"];
string DTS_ImportWorkingPathAndFileName = ConfigurationSettings.AppSettings["DTS_ImportWorkingPathAndFileName"];
string DTS_DestinationServerName = ConfigurationSettings.AppSettings["DTS_DestinationServerName"];
string DTS_DestinationDatabase = ConfigurationSettings.AppSettings["DTS_DestinationDatabase"];
string DTS_DestinationTable = ConfigurationSettings.AppSettings["DTS_DestinationTable"];
string DTS_DestinationUserName = ConfigurationSettings.AppSettings["DTS_DestinationUserName"];
string DTS_DestinationPassword = ConfigurationSettings.AppSettings["DTS_DestinationPassword"];
StringBuilder DTSArgs = new StringBuilder();
DTSArgs.AppendFormat("/N \"{0}\" /G \"{1}\" /F \"{2}\" ",
DTS_PackageName,
DTS_PackageGUID,
DTS_PackagePathAndFileName);
DTSArgs.AppendFormat(@"/A ""DestinationDatabase"":""8""=""{0}"" ", DTS_DestinationDatabase);
DTSArgs.AppendFormat("/A \"DestinationPassword\":\"8\"=\"{0}\" ", DTS_DestinationPassword);
DTSArgs.AppendFormat("/A \"DestinationServerName\":\"8\"=\"{0}\" ", DTS_DestinationServerName);
DTSArgs.AppendFormat("/A \"DestinationTable\":\"8\"=\"{0}\" ", DTS_DestinationTable);
DTSArgs.AppendFormat("/A \"DestinationUserName\":\"8\"=\"{0}\" ", DTS_DestinationUserName);
DTSArgs.AppendFormat("/A \"ImportFileConnection\":\"8\"=\"{0}\" ", DTS_ImportFileConnection);
DTSArgs.AppendFormat("/A \"ImportFileName\":\"8\"=\"{0}\" ", DTS_ImportFileName);
DTSArgs.AppendFormat("/A \"ImportSourcePath\":\"8\"=\"{0}\" ", DTS_ImportSourcePath);
DTSArgs.AppendFormat("/A \"ImportWorkingPath\":\"8\"=\"{0}\" ", DTS_ImportWorkingPath);
DTSArgs.AppendFormat("/A \"ImportWorkingPathAndFileName\":\"8\"=\"{0}\" ", DTS_ImportWorkingPathAndFileName);
DTSArgs.AppendFormat("/W \"0\"");
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = "dtsrun ";
//**** PROBLEM IS HERE: The DTSArgs escpaes the double-quotes and backslashes in paths with backslashes,
//**** then the dtsrun.exe doesn’t like the arguments (see string below)
proc.StartInfo.Arguments = DTSArgs.ToString();
proc.Start();
proc.WaitForExit();
DTSARgs 的样子:
/N "BlockImportNEW" /G “{C22A80D9-7613-43AF-939C-3C04AD7D848A}” /F “\计算机名\文件夹名\文件夹1\文件夹2\文件夹3\文件名.dts” /A "目标数据库":"8"="DBNAME" /一种 "目的地密码":"8"="密码" /一种 "目标服务器名":"8"="服务器名" /一种 "DestinationTable":"8"="dbname.dbo.tablename" /一种 "目标用户名":"8"="用户名" /一种 "ImportFileConnection":"8"="file.txt';'';'0'" /A "导入文件名":"8"="file.txt" /A "ImportSourcePath":"8"="C:\BlockImport" /一种 "ImportWorkingPath":"8"="\computername\foldername\folder1\folder2" /一种 "ImportWorkingPathAndFileName":"8"="\computername\foldername\folder1\folder2\file.txt" /W "0"
proc.StartInfo.Arguments 的样子:
/N \"BlockImportNEW\" /G \"{C22A80D9-7613-43AF-939C-3C04AD7D848A}\" /F \"\\计算机名\文件夹名\folder1\folder2\folder3\filename.dts\" /一种 \"目标数据库\":\"8\"=\"DBNAME\" /一种 \"目标密码\":\"8\"=\"密码\" /一种 \"DestinationServerName\":\"8\"=\"ServerName\" /一种 \"DestinationTable\":\"8\"=\"dbname.dbo.tablename\" /一种 \"目标用户名\":\"8\"=\"用户名\" /一种 \"ImportFileConnection\":\"8\"=\"file.txt';'';'0'\" /一种 \"ImportFileName\":\"8\"=\"file.txt\" /一种 \"ImportSourcePath\":\"8\"=\"C:\BlockImport\" /一种 \"ImportWorkingPath\":\"8\"=\"\\computername\foldername\folder1\folder2\" /一种 \"ImportWorkingPathAndFileName\":\"8\"=\"\\computername\foldername\folder1\folder2\file.txt\" /W \"0\"
执行 proc.Start 时,由于所有额外的反斜杠,它无法正常工作。 似乎 DTSArgs stringbuilder 字符串格式正确,但是当通过 .ToString() 转换并存储在 proc.StartInfo.Arguments 中时,它会得到所有反斜杠。
我怎样才能避免发送 proc.StartInfo.Arguments 所有这些额外的反斜杠?
【问题讨论】: