• 一个sql备份工具


    今天心血来潮,也不知道受什么影响,突然想起做一个远程数据备份的程序,实现自动备份并用ftp传回本地。


    程序中用到了SqlDMO组件及FTP组件。
    程序核心为自定的一个TabPage,作用是载入配置并执行备份。
    using System;
    using System.Windows.Forms;
    using SQLDMO;
    using System.Data;
    using System.Threading;

    namespace HLSoft.ServerBack
    {
        
    public class TabProcessPage : System.Windows.Forms.TabPage
        
    {
            FaibClass.Windows.Forms.ListBox lstInfo;
            Thread thread; 
            FTP ftp;
            
    private string name, service, sqldbname, sqldbuser, sqldbpwd, ftpport, ftpuser, ftppwd, ftpdir, localdir;

            
    public TabProcessPage()
            
    {
                lstInfo 
    = new FaibClass.Windows.Forms.ListBox();
                lstInfo.Dock 
    = DockStyle.Fill;
                lstInfo.DrawMode 
    = DrawMode.OwnerDrawFixed;
                lstInfo.ItemHeight 
    = 18;
                
    base.Controls.Add(lstInfo);
                thread 
    = new Thread(new ThreadStart(BeginBackup));
                thread.IsBackground 
    = true;
            }


            
    public TabProcessPage(DataTable dtbl) : this()
            
    {
                DataRow drow 
    = dtbl.Rows[0];
                
    this.name = base.Text = dtbl.TableName;
                service 
    = drow["Service"].ToString();
                sqldbname 
    = drow["SqlDbName"].ToString();
                sqldbuser 
    = drow["SqlDbUser"].ToString();
                sqldbpwd 
    = Encrypt.DESDecrypt(drow["SqlDbPwd"].ToString(), "faib920");
                ftpport 
    = drow["FtpPort"].ToString();
                ftpuser 
    = drow["FtpUser"].ToString();
                ftppwd 
    = Encrypt.DESDecrypt(drow["FtpPwd"].ToString(), "faib920");
                ftpdir 
    = checkFilePath(drow["FtpDir"].ToString());
                localdir 
    = checkFilePath(drow["LocalDir"].ToString());
            }


            
    public void Start()
            
    {
                
    if(thread.ThreadState == ThreadState.Running)return;
                lstInfo.Items.Add(
    "线程 " + name + " 已启动.");
                thread.Start();
            }


            
    public void Abort()
            
    {
                thread.Abort();
            }


            
    private void BeginBackup()
            
    {
                
    string filename = "";
                filename 
    = BackupSqlDatabase();
                
    if(filename != "")
                
    {
                    lstInfo.Items.Add(
    "---------------------------");
                    DownloadFile(filename);
                }

            }


            
    public string BackupSqlDatabase()
            
    {
                
    string filename = "";
                SQLServerClass sql 
    =new SQLServerClass();
                
    //连接
                try
                
    {
                    sql.LoginSecure 
    = false;
                    sql.Connect(service, sqldbuser, sqldbpwd);
                    lstInfo.Items.Add(
    "连接远程(" + service + ")SQLSERVER服务成功");
                }

                
    catch (Exception exp)
                
    {
                    lstInfo.Items.Add(exp.Message);
                }

                
    //备份
                try
                
    {
                    BackupClass bak 
    = new BackupClass();
                    bak.Database 
    = sqldbname;
                    bak.Action 
    = SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
                    bak.Initialize 
    = true;
                    filename 
    = sqldbname + "_" + DateTime.Now.ToString("yyyyMMddHHmmss"+ ".sqlbak";
                    bak.Files 
    = ftpdir + filename;
                    lstInfo.Items.Add(
    "开始备份数据库(" + sqldbname + ")");
                    lstInfo.Items.Add(
    "备份进度 0%");
                    bak.PercentComplete 
    += new BackupSink_PercentCompleteEventHandler(bak_PercentComplete);
                    bak.SQLBackup(sql);
                    lstInfo.Items.Add(
    "数据库备份完成");
                }

                
    catch (Exception exp)
                
    {
                    lstInfo.Items.Add(exp.Message);
                    filename 
    = "";
                }

                sql.DisConnect();
                lstInfo.Items.Add(
    "断开远程SQLSERVER服务");
                
    return filename;
            }


            
    private string checkFilePath(string path)
            
    {
                
    if(path.Length == 0)throw new Exception("文件路径不正确");
                
    if(path.Substring(path.Length - 11!= "\\")
                
    {
                    
    return path += "\\";
                }

                
    else
                
    {
                    
    return path;
                }

            }


            
    private bool DownloadFile(string filename)
            
    {
                
    bool ret = true;
                ftp 
    = new FTP(service, ftpport == "" ? 21 : int.Parse(ftpport), ftpuser, ftppwd);
                
    try
                
    {
                    
    int perc =  0, oldperc = 0;

                    lstInfo.Items.Add(
    "连接远程FTP服务");
                    ftp.OpenDownload(
    "/" + filename, localdir + filename);
                    lstInfo.Items.Add(
    "下载进度 0%");
                    
    while(ftp.DoDownload() > 0
                    
    {
                        perc 
    = (int)((ftp.BytesTotal * 100)  / ftp.FileSize); 
                        
    if(perc != oldperc)
                            lstInfo.Items[lstInfo.Items.Count 
    - 1].Text = "下载进度 " + perc.ToString() + "%";
                        oldperc 
    = perc;
                    }

                    ftp.RemoveFile(
    "/" + filename);
                    lstInfo.Items.Add(
    "断开远程FTP服务");
                    ftp.Disconnect();
                }

                
    catch (Exception exp)
                
    {
                    lstInfo.Items.Add(exp.Message);
                    ret 
    = false;
                }

                
    return ret;
            }

            
            
    private void bak_PercentComplete(string Message, int Percent)
            
    {
                lstInfo.Items[lstInfo.Items.Count 
    - 1].Text = "备份进度 " + Percent.ToString() + "%";
            }


        }

    }

    下载程序源文件。
  • 相关阅读:
    小程序如何实现rem
    Centos7通过yum跟源码编译安装Nginx
    VMware下的Centos7实践Kvm虚拟化(通俗易懂)
    XAI/MLI 可解释机器学习系列1- 开源&paper汇总
    CTR学习笔记&代码实现1-深度学习的前奏LR->FFM
    tensorflow feature_column踩坑合集
    第四篇-用Flutter手撸一个抖音国内版,看看有多炫
    第三篇-用Flutter手撸一个抖音国内版,看看有多炫
    第二篇-用Flutter手撸一个抖音国内版,看看有多炫
    使用Flutter开发的抖音国际版
  • 原文地址:https://www.cnblogs.com/faib/p/1053188.html
Copyright © 2020-2023  润新知