App.Config file contents:
<?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>
Code:
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();
What DTSARgs looks like:
/N "BlockImportNEW" /G "{C22A80D9-7613-43AF-939C-3C04AD7D848A}" /F "\computername\foldername\folder1\folder2\folder3\filename.dts" /A "DestinationDatabase":"8"="DBNAME" /A "DestinationPassword":"8"="password" /A "DestinationServerName":"8"="ServerName" /A "DestinationTable":"8"="dbname.dbo.tablename" /A "DestinationUserName":"8"="userName" /A "ImportFileConnection":"8"="file.txt';'';'0'" /A "ImportFileName":"8"="file.txt" /A "ImportSourcePath":"8"="C:\BlockImport" /A "ImportWorkingPath":"8"="\computername\foldername\folder1\folder2" /A "ImportWorkingPathAndFileName":"8"="\computername\foldername\folder1\folder2\file.txt" /W "0"
What proc.StartInfo.Arguments looks like:
/N \"BlockImportNEW\" /G \"{C22A80D9-7613-43AF-939C-3C04AD7D848A}\" /F \"\\computername\foldername\folder1\folder2\folder3\filename.dts\" /A \"DestinationDatabase\":\"8\"=\"DBNAME\" /A \"DestinationPassword\":\"8\"=\"password\" /A \"DestinationServerName\":\"8\"=\"ServerName\" /A \"DestinationTable\":\"8\"=\"dbname.dbo.tablename\" /A \"DestinationUserName\":\"8\"=\"userName\" /A \"ImportFileConnection\":\"8\"=\"file.txt';'';'0'\" /A \"ImportFileName\":\"8\"=\"file.txt\" /A \"ImportSourcePath\":\"8\"=\"C:\BlockImport\" /A \"ImportWorkingPath\":\"8\"=\"\\computername\foldername\folder1\folder2\" /A \"ImportWorkingPathAndFileName\":\"8\"=\"\\computername\foldername\folder1\folder2\file.txt\" /W \"0\"
When proc.Start is executed, it doesn't work correctly because of all the extra backslashes. It seems the DTSArgs stringbuilder string is in the correct format, but when converted via .ToString() and stored in proc.StartInfo.Arguments it gets all the backslashes.
How can I keep from sending proc.StartInfo.Arguments all those extra backslashes?