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

📄 bakserver.cs

📁 详细讲解备份数据库源码。
💻 CS
字号:
using System;
using SQLDMO;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace bakServe040907
{
	
	/// <summary>
	/// 数据库备份类说明
	/// </summary>
	public class bakServer
	{
		string ServerName;   //数据服务器名称
		string UserName;     //用户名称
		string Password;     //用户密码
		string message;      //消息提示 
		ProgressBar PBar;    //状态条控件

		public bakServer()
		{
			
		}

		/// <summary>
		/// 取得数据库服务器列表
		/// </summary>
		/// <returns>数据库服务器列表</returns>
		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("取数据库服务器列表出错:"+e.Message)) ; 
				message = "取数据库服务器列表出错:" +e.Message;

			} 
			finally 
			{ 
				sqlApp.Quit() ; 
			} 
			return alServers ; 
		} 


		/// <summary>
		/// 错误消息处理
		/// </summary>
		/// <returns>消息信息</returns>
		public string Msg()
		{		
			return message;
		}

		/// <summary>
		/// 取得指定数据库列表
		/// </summary>
		/// <param name="strServerName">服务器名称</param>
		/// <param name="strUserName">用户名称</param>
		/// <param name="strPwd">用户密码</param>
		/// <returns>数据库列表</returns>
		public ArrayList GetDbList(string strServerName,string strUserName,string strPwd) 
		{ 
			ServerName = strServerName ; 
			UserName = strUserName ; 
			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 err) 
			{ 
//				throw(new Exception("连接数据库出错:"+e.Message)) ; 
				message = "连接数据库出错:" +err.Message;
			} 
			finally 
			{ 
				svr.DisConnect() ; 
				sqlApp.Quit() ; 
			} 
			return alDbs ; 
		} 


		//数据库的备份和实时进度显示代码: 
		/// <summary>
		/// 数据库的备份和实时进度显示
		/// </summary>
		/// <param name="strDbName">数据库名称</param>
		/// <param name="strFileName">备份文件名</param>
		/// <param name="pgbMain">状态条控件名称</param>
		/// <param name="strServerName">服务器名称</param>
		/// <param name="strUserName">用户名称</param>
		/// <param name="strPwd">密码</param>
		/// <returns>备份成功返回true ,否则返回false</returns>
		public bool BackUPDB(string strDbName,string strFileName, ProgressBar pgbMain,string strServerName,string strUserName,string strPwd) 
		{ 
			ServerName = strServerName ; 
			UserName = strUserName ; 
			Password = strPwd ; 

			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)) ; 
				message = "备份数据库失败:" +err.Message;
                return false ; 
			} 
			finally 
			{ 
				svr.DisConnect() ; 
			} 
		} 


		/// <summary>
		/// 显示进度条的当前进度
		/// </summary>
		/// <param name="message"></param>
		/// <param name="percent"></param>
		private void Step(string message,int percent) 
		{ 
			PBar.Value = percent ; 
		} 
		//		其中,这两个语句实现了进度的实时显示: 
		//		SQLDMO.BackupSink_PercentCompleteEventHandler pceh = new SQLDMO.BackupSink_PercentCompleteEventHandler(Step); 
		//		bak.PercentComplete += pceh; 
		//		Step就是上面private void Step(string message,int percent) 的方法名称,它用来显示进度条的当前进度。 



		/// <summary>
		/// 数据库的恢复和杀死进程
		/// </summary>
		/// <param name="strDbName">数据库名称</param>
		/// <param name="strFileName">备份文件名</param>
		/// <param name="pgbMain">状态条控件名称</param>
		/// <param name="strServerName">服务器名称</param>
		/// <param name="strUserName">用户名称</param>
		/// <param name="strPwd">密码</param>
		/// <returns>恢复成功返回true ,否则返回false</returns>
		public bool RestoreDB(string strDbName,string strFileName, ProgressBar pgbMain,string strServerName,string strUserName,string strPwd ) 
		{ 
			PBar = pgbMain ; 
			SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass() ; 
			try 
			{ 
				ServerName = strServerName ; 
				UserName = strUserName ; 
				Password = strPwd ; 

				svr.Connect(ServerName,UserName,Password) ; 
				SQLDMO.QueryResults qr = svr.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() == strDbName.ToUpper()) 
						svr.KillProcess(lPID) ; 
				} 

				SQLDMO.Restore res = new SQLDMO.RestoreClass() ; 
				res.Action = 0 ; 
				SQLDMO.RestoreSink_PercentCompleteEventHandler pceh = new SQLDMO.RestoreSink_PercentCompleteEventHandler(Step); 
				res.PercentComplete += pceh; 
				res.Files = strFileName ; 

				res.Database = strDbName ; 
				res.ReplaceDatabase = true ; 
				res.SQLRestore(svr) ; 
				return true ; 
			} 
			catch(Exception err) 
			{ 
//				throw(new Exception("恢复数据库失败,请关闭所有和该数据库连接的程序!"+err.Message)) ; 
				message = "恢复数据库失败,请关闭所有和该数据库连接的程序!" +err.Message;
				return false;
			} 
			finally 
			{ 
				svr.DisConnect() ; 
			} 
		} 
	}
}

⌨️ 快捷键说明

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