C#利用SQLDMO备份与还原数据库
SQLDMO.dll是隨SQL Server2000一起發(fā)布的。SQLDMO.dll自身是一個COM對象
SQLDMO(SQL Distributed Management Objects,SQL分布式管理對象)封裝 Microsoft SQL Server 2000 數(shù)據(jù)庫中的對象。SQL-DMO 允許用支持自動化或 COM 的語言編寫應(yīng)用程序,以管理 SQL Server 安裝的所有部分。SQL-DMO 是 SQL Server 2000 中的 SQL Server 企業(yè)管理器所使用的應(yīng)用程序接口 (API);因此使用 SQL-DMO 的應(yīng)用程序可以執(zhí)行 SQL Server 企業(yè)管理器執(zhí)行的所有功能。
SQLServer的大致關(guān)系:
Application-->SQLServer-->DataBase
實例SQLDMO,主要用到的是其中的以下幾個類:
SQLDMO.Application(使用 SQLDMO.ApplicationClass創(chuàng)建)、
SQLDMO.SQLServer(使用SQLDMO.SQLServerClass創(chuàng)建,主要用到它的Connect來連接數(shù)據(jù)庫服務(wù)器)、
SQLDMO.NameList(可以通過它和Application獲取服務(wù)器集合,其它的請看其API)
SQLDMO.DataBase(可以通過它和SQLServer.DataBases獲取數(shù)據(jù)庫集合)
個人實現(xiàn)的數(shù)據(jù)庫備份與還原的關(guān)鍵代碼:
///文件名:SqlServerBackupRestore.cs
///功能:備份與還原SqlServer數(shù)據(jù)庫
///作者:楊春
///最后修改日期:2008-11-25 22:35:00
using System;
using System.Data.SqlClient;
/// <summary>
///SqlServerBackupRestore 的摘要說明
///SqlServer數(shù)據(jù)的備份與還原
/// </summary>
public class SqlServerBackupRestore:IDisposable
{
??? private string _serverName = string.Empty;
??? private string _userId = string.Empty;
??? private string _userPassword = string.Empty;
??? private string _databaseName = string.Empty;
??? private string _backFile = string.Empty;
??? SQLDMO.SQLServerClass server = null;
??? SQLDMO.BackupClass backup = null;
??? SQLDMO.RestoreClass restore = null;
??? /// <summary>
??? /// SqlServer備份還原
??? /// </summary>
??? public SqlServerBackupRestore()
??? {
??? }
??? /// <summary>
??? /// SqlServer備份還原
??? /// </summary>
??? /// <param name="connectionString">數(shù)據(jù)庫連接字符串</param>
??? /// <param name="backFile">備份文件名</param>
??? public SqlServerBackupRestore(string connectionString, string backFile)
??? {
??????? SqlConnectionStringBuilder connectionBuilder = new SqlConnectionStringBuilder(connectionString);
??????? _serverName = connectionBuilder.DataSource;
??????? _userId = connectionBuilder.UserID;
??????? _userPassword = connectionBuilder.Password;
??????? _databaseName = connectionBuilder.InitialCatalog;
??????? _backFile = backFile;
??? }
??? /// <summary>
??? /// SqlServer備份還原
??? /// </summary>
??? /// <param name="serverName">服務(wù)器名或IP</param>
??? /// <param name="userId">數(shù)據(jù)庫帳號</param>
??? /// <param name="userPassword">數(shù)據(jù)庫密碼</param>
??? /// <param name="databaseName">數(shù)據(jù)庫名</param>
??? /// <param name="backFile">備份文件名</param>
??? public? SqlServerBackupRestore(string serverName, string userId, string userPassword, string databaseName, string backFile)
?{
??????? _serverName = serverName;
??????? _userId = userId;
??????? _userPassword = userPassword;
??????? _databaseName = databaseName;
??????? _backFile = backFile;
?}
??? /// <summary>
??? /// 服務(wù)器名或IP
??? /// </summary>
??? public string ServerName
??? {
??????? get { return _serverName; }
??????? set { _serverName = value; }
??? }
??? /// <summary>
??? /// 數(shù)據(jù)庫用戶名
??? /// </summary>
??? public string UserId
??? {
??????? get { return _userId; }
??????? set { _userId = value; }
??? }
??? /// <summary>
??? /// 數(shù)據(jù)庫密碼
??? /// </summary>
??? public string Password
??? {
??????? get { return _userPassword; }
??????? set { _userPassword = value; }
??? }
??? /// <summary>
??? /// 數(shù)據(jù)庫名
??? /// </summary>
??? public string DataBaseName
??? {
??????? get { return _databaseName; }
??????? set { _databaseName = value; }
??? }
??? /// <summary>
??? /// 備份文件名
??? /// </summary>
??? public string BackupFile
??? {
??????? get { return _backFile; }
??????? set { _backFile = value; }
??? }
??? /// <summary>
??? /// 備份數(shù)據(jù)庫
??? /// </summary>
??? /// <returns>成功,true,失敗,false</returns>
??? public bool Backup()
??? {
??????? bool result = true;
??????? server = new SQLDMO.SQLServerClass();
??????? backup = new SQLDMO.BackupClass();
??????? try
??????? {
??????????? server.LoginSecure = false;
??????????? server.Connect(ServerName, UserId, Password);
??????????? backup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
??????????? backup.Database = DataBaseName;
??????????? backup.Files = BackupFile;
??????????? backup.BackupSetName = DataBaseName;
??????????? backup.BackupSetDescription = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
??????????? backup.Initialize = true;
??????????? backup.SQLBackup(server);
??????? }
??????? catch (Exception ex)
??????? {
??????????? result = false;
??????????? throw ex;
??????? }
??????? finally
??????? {
??????????? server.DisConnect();
??????? }
??????? return result;
??? }
??? /// <summary>
??? /// 還原數(shù)據(jù)庫
??? /// </summary>
??? /// <returns>成功,true,失敗,false</returns>
??? public bool Restore()
??? {
??????? bool result = false;
??????? server = new SQLDMO.SQLServerClass();
??????? try
??????? {
??????????? server.LoginSecure = false;
??????????? server.Connect(ServerName, UserId, Password);
??????????? SQLDMO.QueryResults queryRestlts = server.EnumProcesses(-1);
??????????? int iColPIDNum = -1;
??????????? int iColDbName = -1;
??????????? for (int i = 1; i <= queryRestlts.Columns; i++)
??????????? {
??????????????? string strName = queryRestlts.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 <= queryRestlts.Rows; i++)
??????????? {
??????????????? int lPID = queryRestlts.GetColumnLong(i, iColPIDNum);
??????????????? string strDBName = queryRestlts.GetColumnString(i, iColDbName);
??????????????? if (strDBName.ToUpper() == DataBaseName.ToUpper())
??????????????????? server.KillProcess(lPID);
??????????? }
??????????? restore = new SQLDMO.RestoreClass();
??????????? restore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
??????????? restore.Database = DataBaseName;
??????????? restore.Files = BackupFile;
??????????? restore.FileNumber = 1;
??????????? restore.ReplaceDatabase = true;
??????????? restore.SQLRestore(server);
??????????? result = true;
??????? }
??????? catch (Exception ex)
??????? {
??????????? throw ex;
??????? }
??????? finally
??????? {
??????????? server.DisConnect();
??????? }
??????? return result;
??? }
??? #region IDisposable 成員
??? /// <summary>
??? /// 釋放資源,在用完之后顯示調(diào)用
??? /// </summary>
??? public void Dispose()
??? {
??????? if (server != null)
??????? {
??????????? server.DisConnect();
??????????? server = null;
??????? }
??????? if (backup != null)
??????? {
??????????? backup = null;
??????? }
??????? if (restore != null)
??????? {
??????????? restore = null;
??????? }
??????? GC.Collect();
??????? GC.WaitForPendingFinalizers();
??? }
??? #endregion
}
總結(jié)
以上是生活随笔為你收集整理的C#利用SQLDMO备份与还原数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 收集sqlite常见问题
- 下一篇: C#调用API弹出打印机属性对话框