⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datarestore.cs

📁 主要用语管理系统中的sql数据库备份和数据库恢复,可以完全备份和差异备份
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace DataManager
{
    /// <summary>
    /// DbOper类,主要应用SQLDMO实现对Microsoft SQL Server数据库的备份和恢复
    /// </summary>
    public partial class DbOper
    {
        /// <summary>
        /// DbOper类的构造函数
        /// </summary>
        ProgressBar PBar = null;
        //private DbOper()
        //{

        //}
        /// <summary>
        /// 数据库备份
        /// </summary>
        public void DbBackup(string uid, string pwd, string DataServer, string Dataname, string DataBak, ProgressBar pgbMain)
        {
            PBar = pgbMain;
            SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
            SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
            try
            {
                oSQLServer.LoginSecure = false;
                oSQLServer.Connect(DataServer, uid, pwd);
                oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
                oBackup.Database = Dataname;
                oBackup.Files = DataBak;
                oBackup.BackupSetName = Dataname;
                oBackup.BackupSetDescription = "DateBase Buckup";
                oBackup.Initialize = true;
                SQLDMO.BackupSink_PercentCompleteEventHandler pceh = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step);
                oBackup.PercentComplete += pceh;
                oBackup.SQLBackup(oSQLServer);
            }
            catch
            {
                throw;
            }
            finally
            {
                oSQLServer.DisConnect();
            }
        }
        /// <summary>
        /// 数据库恢复
        /// </summary>
        public void DbRestore(string uid, string pwd, string DataServer, string Dataname, string DataBak, ProgressBar pgbMain)
        {
            PBar = pgbMain;
            SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
            SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
            try
            {
                oSQLServer.LoginSecure = false;
                oSQLServer.Connect(DataServer, uid, pwd);
                SQLDMO.QueryResults qr = oSQLServer.EnumProcesses(-1);
                int iColPIDNum = -1;
                int iColDbName = -1;
                for (int i = 1; i <= qr.Columns; i++)
                {
                    string strName = qr.get_ColumnName(i);
                    if (strName.ToUpper().Trim() == "SPID")
                    {
                        iColPIDNum = i;
                    }
                    else if (strName.ToUpper().Trim() == "DBNAME")
                    {
                        iColDbName = i;
                    }
                    if (iColPIDNum != -1 && iColDbName != -1)
                        break;
                }

                for (int i = 1; i <= qr.Rows; i++)
                {
                    int lPID = qr.GetColumnLong(i, iColPIDNum);
                    string strDBName = qr.GetColumnString(i, iColDbName);
                    if (strDBName.ToUpper() == Dataname.ToUpper())
                        oSQLServer.KillProcess(lPID);
                }
                oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
                oRestore.Database = Dataname;
                oRestore.Files = DataBak;
                oRestore.FileNumber = 1;
                oRestore.ReplaceDatabase = true;
                SQLDMO.RestoreSink_PercentCompleteEventHandler pceh = new SQLDMO.RestoreSink_PercentCompleteEventHandler(Step);
                oRestore.PercentComplete += pceh;
                oRestore.SQLRestore(oSQLServer);
            }
            catch (Exception err)
            {
                throw (new Exception("Restore DataBase Faile,Please close relating the BaseBase's Program!" + err.Message));
                ;
            }
            finally
            {
                oSQLServer.DisConnect();
            }
        }
        private void Step(string message, int percent)
        {
            PBar.Value = percent;
        }
        public static void CombServer(ComboBox cboServers)
        {
            SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
            SQLDMO.NameList sqlServers = sqlApp.ListAvailableSQLServers();

            for (int i = 0; i < sqlServers.Count; i++)
            {
                object srv = sqlServers.Item(i + 1);
                if (srv != null)
                {
                    cboServers.Items.Add(srv);
                }
            }
            if (cboServers.Items.Count > 0)
                cboServers.SelectedIndex = 0;
            else
                cboServers.Text = "<No available SQL Servers>";
        }
        public static void CombDb(string txtUser, string txtPassword, ComboBox cboDatabase, ComboBox cboServers)
        {
            SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
            SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
            srv.Connect(cboServers.SelectedItem.ToString(), txtUser, txtPassword);
            foreach (SQLDMO.Database db in srv.Databases)
            {
                if (db.Name != null)
                    cboDatabase.Items.Add(db.Name);
            }

        }
        public static void ListBoxTable(string txtUser, string txtPassword, ListBox lstObjects, ComboBox cboServers, ComboBox cboDatabase)
        {
            SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
            srv.Connect(cboServers.SelectedItem.ToString(), txtUser, txtPassword);
            for (int i = 0; i < srv.Databases.Count; i++)
            {
                if (srv.Databases.Item(i + 1, "dbo").Name == cboDatabase.SelectedItem.ToString())
                {
                    SQLDMO._Database db = srv.Databases.Item(i + 1, "dbo");
                    lstObjects.Items.Clear();
                    for (int j = 0; j < db.StoredProcedures.Count; j++)
                    {
                        lstObjects.Items.Add(db.StoredProcedures.Item(j + 1, "dbo").Name);
                    }
                    break;
                }
            }
        }
        public ArrayList GetServerList()
        {
            ArrayList alServers = new ArrayList();
            SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
            try
            {
                SQLDMO.NameList serverList = sqlApp.ListAvailableSQLServers();
                for (int i = 1; i <= serverList.Count; i++)
                {
                    alServers.Add(serverList.Item(i));
                }
            }
            catch (Exception e)
            {
                throw (new Exception("Fech Database Server List Error:" + e.Message));
            }
            finally
            {
                sqlApp.Quit();
            }
            return alServers;
        }
        public ArrayList GetDbList(string strServerName, string strUserName, string strPwd)
        {
            string ServerName = strServerName;
            string UserName = strUserName;
            string Password = strPwd;

            ArrayList alDbs = new ArrayList();
            SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
            SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();
            try
            {
                svr.Connect(ServerName, UserName, Password);
                foreach (SQLDMO.Database db in svr.Databases)
                {
                    if (db.Name != null)
                        alDbs.Add(db.Name);
                }
            }
            catch (Exception e)
            {
                throw (new Exception("Connect DataBase Error!:" + e.Message));
            }
            finally
            {
                svr.DisConnect();
                sqlApp.Quit();
            }
            return alDbs;
        }
        public bool BackUPDB(string strDbName, string strFileName, ProgressBar pgbMain)
        {
            ////string ServerName = strServerName;
            ////string UserName = strUserName;
            ////string Password = strPwd;
            //ProgressBar PBar = pgbMain;
            //SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();
            //try
            //{
            //    svr.Connect(ServerName, UserName, Password);
            //    SQLDMO.Backup bak = new SQLDMO.BackupClass();
            //    bak.Action = 0;
            //    bak.Initialize = true;
            //    SQLDMO.BackupSink_PercentCompleteEventHandler pceh = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step);
            //    bak.PercentComplete += pceh;

            //    bak.Files = strFileName;
            //    bak.Database = strDbName;
            //    bak.SQLBackup(svr);
            return true;
            //}
            //catch (Exception err)
            //{
            //    throw (new Exception("备份数据库失败" + err.Message));
            //}
            //finally
            //{
            //    svr.DisConnect();
            //}
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -