我要求使用像这样的批处理文件运行一组* .sql文件。
private void btn_Execute_Click(object sender, EventArgs e)
{
try {
//Creating A batch file to execute the scripts using SQLPLUS....
FileInfo fi5 = new FileInfo("c:/EMPSCRIPTS/execute.bat");
StreamWriter sw2 = fi5.CreateText();
sw2.WriteLine("@Echo Off \r \nsqlplus scotte/tiger@emp @\"c:/EMPSCRIPTS/RUNALL.sql\" \r \nEXIT ");
sw2.Close();
System.Diagnostics.Process proc; // Declare New Process
proc = System.Diagnostics.Process.Start(ConfigurationManager.AppSettings["BatFilePath"].ToString()); // run test.bat from command line.
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.Arguments = "/c" + ConfigurationManager.AppSettings["BatFilePath"].ToString();
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardInput = true;
proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
proc.Close();
}
catch (Exception ex) {
MessageBox.Show("Insertion Completed");
}
}
但我想阻止一些文件被不必要地执行。我找到了传递参数的选项。我想静态地给文件提供参数。基于该参数必须执行的用户输入。任何人都可以帮助我吗? 在此先感谢。
答案 0 :(得分:2)
您正在启动进程后更改StartInfo的值,这对进程没有影响。 See the "Remarks" section here for more information.
创建ProcessStartInfo的新实例,使用您需要的内容进行设置,然后将其传递到the overload of Start,其中包含此类型的实例。
此外,一旦更改了代码,您可以跳过将命令行写入批处理文件。您的executable filename为sqlplus
,arguments为scotte/tiger@emp @\"c:/EMPSCRIPTS/RUNALL.sql\"
答案 1 :(得分:1)
你误用了Process.Start
。
您需要创建一个新的ProcessStartInfo
对象,设置其所有属性,然后将其传递给Process.Start
。
正如您的代码所做的那样,修改已在运行的进程的StartInfo
无效。