我尝试将此代码用作控制台应用程序,以便我可以备份mydatabase automatics 我不确定它有什么问题
static void Main(string[] args)
{
try
{
DateTime backupTime = DateTime.Now;
int year = backupTime.Year;
int month = backupTime.Month;
int day = backupTime.Day;
int hour = backupTime.Hour;
int minute = backupTime.Minute;
int second = backupTime.Second;
int ms = backupTime.Millisecond;
String tmestr = backupTime.ToString();
tmestr = "C:\\" + year + "-" + month + "-" + day + "-" + hour + "-" + minute + ".sql";
StreamWriter file = new StreamWriter(tmestr);
ProcessStartInfo proc = new ProcessStartInfo();
string cmd = string.Format(@"-u{0} -p{1} -h{2} {3} > {4};", "root", "", "localhost", "dbfile", "backup.sql");
proc.FileName = "mysqldump";
proc.RedirectStandardInput = false;
proc.RedirectStandardOutput = true;
proc.Arguments = cmd;//"-u root -p smartdb > testdb.sql";
proc.UseShellExecute = false;
Process p = Process.Start(proc);
string res;
res = p.StandardOutput.ReadToEnd();
file.WriteLine(res);
p.WaitForExit();
file.Close();
}
catch (IOException ex)
{
MessageBox.Show("Disk full or other IO error , unable to backup!");
}
}
答案 0 :(得分:0)
由于我不确定你所犯的是什么样的错误,至少可以改变它。
string cmd = string.Format(@"-u{0} -p{1} -h{2} {3} > {4};", "root", "", "localhost", "dbfile", "backup.sql");
后来你评论它应该是-u root -p smartdb > testdb.sql";
除了以上之外,在-u之后缺少空格,所以我将它改为:
string cmd = string.Format(@"-u {0} -p {1} -h {2} {3} > {4};", "root", "", "localhost", "dbfile", "backup.sql");
答案 1 :(得分:0)
为什么要创建StreamWriter并尝试获取mysqldump
的输出,为什么不告诉mysqldump写入备份文件本身?
string cmd = string.Format(@"-u{0} -p{1} -h{2} {3} > ""{4}"";",
"root", "", "localhost", "dbfile", tmestr);
答案 2 :(得分:0)
对于初学者,我会改变你输出信息的方式。您实际上是打开一个文件,因此您可以将备份实用程序的输出重定向到该文件。进程调用中的>
就是出于此目的。只需将"backup.sql"
参数更改为tmestr
。
此外,由于输出已被重定向到文件,因此您的进程将无法返回任何内容。但是因为我们现在正在将它转移到正确的路径上,这应该是无关紧要的。
最后一项更改,请在-u{0}
之间添加一个空格,使其为-u {0}
。与-h {2}相同。
总结:
StreamWriter
以及与之关联的所有变量String.Format
以使用`tmestr cmd
&-u
-h
变量中添加空格
你应该做得很好(假设找到mysqldump
可执行文件不是问题。