命令提示符找不到指定的文件

时间:2015-10-02 05:04:25

标签: c# command-prompt sqlcmd

我试图创建一个实用程序来自动恢复大量数据库但是我被卡住了。它是SQLCMD的路径或命令字符串是错误的。 Win32Exception was unhandled

  

未处理的类型' System.ComponentModel.Win32Exception'发生在System.dll

中      

附加信息:系统找不到指定的文件

字符串正在命令提示符下工作,但不在我的应用程序上。 在命令提示符

SQLCMD -E -S Ge\sqlexpress -Q "RESTORE DATABASE dbName FROM DISK='C:\app\dbName_300915_000.bak'"

关于我的申请

@"SQLCMD -E -S Ge\sqlexpress -Q ""RESTORE DATABASE dnName FROM DISK='C:\app\dbName_300915_000.bak'"""

我将SQLCMD替换为完整路径

@"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE -E -S Ge\sqlexpress -Q ""RESTORE DATABASE dbName FROM DISK='C:\app\dnName_300915_000.bak'"""

仍然无法正常工作。可能是多个SQLCMD ??

我的应用的代码是

ProcessStartInfo psi = new ProcessStartInfo(@"SQLCMD -E -S Ge\sqlexpress -Q ""RESTORE DATABASE dnName FROM DISK='C:\app\dbName_300915_000.bak'""");
        psi.UseShellExecute = false;
        psi.RedirectStandardOutput = true;
        psi.CreateNoWindow = true;
        var proc = Process.Start(psi);

        string s = proc.StandardOutput.ReadToEnd();

        textBox2.Text = s;

2 个答案:

答案 0 :(得分:1)

由于某种原因,此代码

using System.Diagnostics;
Process cmd = new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();
cmd.StandardInput.WriteLine("echo Oscar");
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();
Console.WriteLine(cmd.StandardOutput.ReadToEnd());

在这里找到https://stackoverflow.com/a/32872174/3424327有效!

答案 1 :(得分:0)

我认为每个双引号都必须用一组双引号括起来。我在RESTORE前面只看到两个双引号。 试试这个:

@"SQLCMD -E -S Ge\sqlexpress -Q """RESTORE DATABASE dbName FROM DISK='C:\app\dbName_300915_000.bak'""""