Я пытаюсь использовать этот код в качестве консольного приложения, чтобы я мог создать резервную копию 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!");
}
}
Почему вы создаете StreamWriter и пытаетесь получить вывод mysqldump
, почему бы просто не сказать mysqldump для записи непосредственно в файл резервной копии?
string cmd = string.Format(@"-u{0} -p{1} -h{2} {3} > ""{4}"";",
"root", "", "localhost", "dbfile", tmestr);
для начала я бы изменил, как вы выводите информацию. Вы по существу открываете файл, чтобы вы могли перенаправить вывод утилиты резервного копирования в этот файл. >
в вызове процесса для этой цели. Просто измените параметр "backup.sql"
на tmestr
.
Кроме того, поскольку выход уже перенаправляется в файл, вашему процессу нечего возвращать. Но поскольку у нас теперь есть дамп по правильному пути, это должно быть неуместным.
Одно окончательное изменение, добавьте пробел между вашим -u{0}
, чтобы он -u {0}
. И то же самое с -h {2}.
Вкратце:
StreamWriter
и все связанные с ним переменныеString.Format
в ваших аргументах процесса, чтобы использовать `tmestrcmd
для -u
& -h
И вы должны быть хорошими в работе (при условии, что это не проблема с поиском исполняемого файла mysqldump
.
Так как я не уверен, какую ошибку вы получаете, по крайней мере, это может быть изменено.
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");