我试图创建一个实用程序来自动恢复大量数据库但是我被卡住了。它是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;
答案 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());
答案 1 :(得分:0)
我认为每个双引号都必须用一组双引号括起来。我在RESTORE前面只看到两个双引号。 试试这个:
@"SQLCMD -E -S Ge\sqlexpress -Q """RESTORE DATABASE dbName FROM DISK='C:\app\dbName_300915_000.bak'""""