C#でMySQLデータベースのバックアップリストア操作を行う

5045 ワード

一、cmdコマンドの実行
        /// 
        ///   cmd  
        /// 
        ///         
        ///       
        public string StartCmd(string workingDirectory, string command)
        {
            string strOutput = "";

            Process p = new Process();
            p.StartInfo.FileName = "cmd.exe";
            p.StartInfo.Arguments = "/C" + command;// "/c"          
            p.StartInfo.WorkingDirectory = workingDirectory;
            p.StartInfo.UseShellExecute = false;//   shell     
            p.StartInfo.RedirectStandardInput = true;//     
            p.StartInfo.RedirectStandardOutput = true;//       
            p.StartInfo.RedirectStandardError = true;//       
            p.StartInfo.CreateNoWindow = true;//      

            //    CMD        ???
            try
            {
                if (p.Start())//  
                {
                    p.WaitForExit();//       ,    
                    strOutput = p.StandardOutput.ReadToEnd();//     
                }
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message, "    ");
            }
            finally
            {
                if (p != null) p.Close();
            }
            return strOutput;
        }

二、データベース全体のバックアップ
ここでm_UserId, m_Pwd, m_DataBaseNameは、データベースのユーザー名、パスワード、バックアップするデータベース名です.データベース操作クラスに統合されているため、パラメータはリストされていません.
        /// 
        ///      
        /// 
        /// mySql   
        /// mySql  
        ///          
        public string BackUpDB()
        {
            string strFilePath = "";

            SaveFileDialog sf = new SaveFileDialog();
            sf.Filter = "     (*.sql)|*.sql";
            sf.CheckPathExists = true;
            sf.AddExtension = true;//       
            sf.OverwritePrompt = true;//      ,    
            sf.FileName = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".sql";//     

            if (sf.ShowDialog() == DialogResult.OK)
            {
                // mysqldump -u    -p   -h   --datebases dbname1 dbname2...dbnamen>  
                //    “--”    sql  , “/*!40014”      MySQL        
                string strCmd = string.Format("mysqldump -u{0} -p{1} {2}>{3}", m_UserId, m_Pwd, m_DataBaseName,
                    sf.FileName);//       

                string strDbPath = GetMySqlInstallPath();//mySql    
                try
                {
                    StartCmd(strDbPath, strCmd);
                    if (File.Exists(sf.FileName))
                    {
                        MessageBox.Show("    !  :" + sf.FileName, "    ");
                        strFilePath = sf.FileName;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString());
                }
            }
            return strFilePath;
        }

三、データベースの復元
        /// 
        ///      
        /// 
        /// mySql   
        /// mySql  
        ///          
        public string RestoreDB()
        {
            string strFileName = string.Empty;

            if (XtraMessageBox.Show("       ,          !", "    ", MessageBoxButtons.YesNo,
                MessageBoxIcon.Exclamation) == DialogResult.Yes)
            {
                OpenFileDialog op = new OpenFileDialog();
                op.Title = "        ";//       
                op.Filter = "     (*.sql)|*.sql";
                op.CheckPathExists = true;
                op.RestoreDirectory = true;//           

                if (op.ShowDialog() == DialogResult.OK)
                {
                    // :mysql -uroot -p1234 dbname

四、使用するその他の関数
        /// 
        ///   mySql    
        /// 
        /// 
        public string GetMySqlInstallPath()
        {
            string strPath = "";
            string strSql = "SELECT @@basedir AS basePath From dual";
            object obj = GetSingleObject(strSql);

            if (obj != null)
            {
                strPath = obj.ToString();
                strPath = strPath.Replace("/", "\\");
                strPath += "bin";
            }

            return strPath;
        }