命令提示符找不到指定的文件
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());
在这里找到 有效!
我正在尝试创建一个实用程序来自动恢复大量数据库,但我被卡住了。要么是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());
在这里找到 有效!