У кого-нибудь есть идея, почему это может произойти? Один и тот же код не работает на разных ПК?Может ли это быть проблемой PostgreSQL? - PullRequest
0 голосов
/ 24 мая 2011

Привет! Я использовал приведенный ниже код на C # для создания резервной копии базы данных в PostgreSQL. Этот код запускается при нажатии кнопки резервного копирования

private void lnkSCBackup_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
 SaveFileDialog save = new SaveFileDialog();              
 save.Filter = "Postgre backups (*.backup)|*.backup";      
 save.ShowDialog();       
 if (save.FileName != "")    
 {  
                string saveFileName = "\"" + save.FileName + "\"";  
                string host =  S ystem.Configuration.ConfigurationSettings.AppSettings["HOST"].ToString().Trim();  
                string port = System.Configuration.ConfigurationSettings.AppSettings["PORT"].ToString().Trim();  
                string userName = System.Configuration.ConfigurationSettings.AppSettings["USERNAME"].ToString().Trim();  
                string password = System.Configuration.ConfigurationSettings.AppSettings["PASSWORD"].ToString().Trim();  
                string dataBase = System.Configuration.ConfigurationSettings.AppSettings["DATABASE"].ToString().Trim();
try 
                {
                    string Creten = "pg_dump -h " + host + " -U " + userName + " -p " + port + " -F c -b -v " + dataBase + " > " + saveFileName;

                    try
                    {
                        // create the ProcessStartInfo using "cmd" as the program to be run,
                        // and "/c " as the parameters.
                        // Incidentally, /c tells cmd that we want it to execute the command that follows,
                        // and then exit.
                        System.Diagnostics.ProcessStartInfo procStartInfo =
                                               new System.Diagnostics.ProcessStartInfo("cmd", "/c " + Creten);

                        // The following commands are needed to redirect the standard output.
                        // This means that it will be redirected to the Process.StandardOutput StreamReader.
                        procStartInfo.RedirectStandardOutput = true;
                        procStartInfo.UseShellExecute = false;
                        // Do not create the black window.
                        procStartInfo.CreateNoWindow = true;
                        // Now we create a process, assign its ProcessStartInfo and start it
                        System.Diagnostics.Process proc = new System.Diagnostics.Process();
                        proc.StartInfo = procStartInfo;
                        proc.Start();
                        proc.WaitForExit();
                        // Get the output into a string
                        string result = proc.StandardOutput.ReadToEnd();
                        //Gets the total processing time for this particular process
                        string totalProcessingTime = proc.TotalProcessorTime.Ticks.ToString();
                        //progress bar working                       
                        progressBar1.Visible = true;
                        progressBar1.BringToFront();
                        progressBar1.Minimum = 0;
                        progressBar1.Maximum = int.Parse(totalProcessingTime);
                        progressBar1.Step = 500;
                        progressBar1.Value = 0;
                        this.lblBackup.Visible = true;
                        this.lblBackup.Text = "Backing Up Database";//To show the user it is backing up
                        this.lblBackup.Font = new Font("Microsoft Sans Serif", 9, System.Drawing.FontStyle.Regular);
                        this.Refresh();
                        while (progressBar1.Value < progressBar1.Maximum)
                        {
                            progressBar1.Value += 10;//= 10000;
                        }
                        progressBar1.Visible = false;
                        this.lblBackup.Visible = false;
                        int exitCode = proc.ExitCode;
                        if (exitCode.Equals(0))
                        {
                            MessageBox.Show("             Backup Success            ");
                        }
                        else
                        {
                            MessageBox.Show("           Backup not Success          ");
                        }

                    }
                    catch (Exception objException)
                    {
                        // Log the exception
                    }
                }

Теперь моя проблема в том, что эта часть кода работаетнормально в моей системе и резервное копирование сделано правильно.Но не работает в другой системе, она, наконец, приходит и застревает в утверждении

string result = proc.StandardOutput.ReadToEnd();

У кого-нибудь есть идеи, почему это может произойти? Тот же код не работает на разных ПК ???Может ли это быть проблемой PostgreSQL

Заранее спасибо !!!!

1 Ответ

1 голос
/ 24 мая 2011

Не все странно, что «один и тот же код не работает на разных ПК», поскольку разные машины могут иметь разные среды. Во-первых, вы вызываете системную команду

pg_dump -h " + host + " -U " + userName + " -p " + port + " -F c -b -v " + dataBase 

Вы проверили, что он работает на второй машине? (т.е. pg_dump находится на вашем пути, и вы можете подключиться к вашей pg DB с этими параметрами)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...