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

Command prompt cannot find file specified

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

An unhandled exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll

Additional information: The system cannot find the file specified

该字符串在命令提示符下有效,但在我的应用程序中无效。 在命令提示符下

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 Server0\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;

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

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

出于某种原因,此代码

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());

在这里找到 有效!