日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

[整理] C#调用SQLDMO.DLL时间数据库备份 / 还原。 (香神无涯) // C#实现SQLSERVER2000数据库备份还原的两种方法 (带进度条)...

發(fā)布時間:2025/6/17 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [整理] C#调用SQLDMO.DLL时间数据库备份 / 还原。 (香神无涯) // C#实现SQLSERVER2000数据库备份还原的两种方法 (带进度条)... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

/// <summary>
/// 通過調(diào)用MSSQL的SQLDMO.DLL文件來實現(xiàn)備份數(shù)據(jù)庫
/// 1.首先在在項目中引用SQLDMO.DLL文件。
/// 2.在引用中的SQLDMO.DLL文件右擊-->屬性-->設置[嵌入互操作類型]為flash
/// </summary>
public static void DBBackup()
{
SQLDMO.Backup dbBackup = new SQLDMO.BackupClass();
SQLDMO.SQLServer sqlServer = new SQLDMO.SQLServerClass();
try
{
sqlServer.LoginSecure = false;
sqlServer.Connect("localhost", "sa", "");
dbBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
dbBackup.Database = "kuang"; //數(shù)據(jù)庫名字
dbBackup.Files = @"d:\kuang_bak.bak"; //備份位置
dbBackup.BackupSetName = "kuang"; //名稱,在企業(yè)管理器里面選擇備份的時候也有這個,貌似沒用。
dbBackup.BackupSetDescription = "數(shù)據(jù)庫備份"; //描述,在企業(yè)管理器里面選擇備份的時候也有這個,貌似沒用。
dbBackup.Initialize = true;
dbBackup.SQLBackup(sqlServer);
}
catch
{
throw;
}
finally
{
sqlServer.DisConnect();
}
}

?

?

/// <summary>
/// 通過調(diào)用MSSQL的SQLDMO.DLL文件來實現(xiàn)從備份文件恢復到是數(shù)據(jù)庫
/// 注:恢復是數(shù)據(jù)庫必須是沒有鏈接的。清楚鏈接的方法:在企業(yè)管理器右擊數(shù)據(jù)庫-->分離數(shù)據(jù)庫-->點擊清楚按鈕即可
/// </summary>
private void DBReply()
{
SQLDMO.Restore restore = new SQLDMO.RestoreClass();
SQLDMO.SQLServer sqlserver = new SQLDMO.SQLServerClass();
sqlserver.LoginSecure = false;
sqlserver.Connect("localhost", "sa", "");
restore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
restore.Database = "kuang";
restore.Files = @"d:\kuang_bak.bak";
restore.FileNumber = 1;
restore.SQLRestore(sqlserver);
}

?

在回復的過程中,需要保證數(shù)據(jù)庫沒有正在使用,網(wǎng)上看到的代碼經(jīng)測試沒有效果,如果有朋友知道方法的懇請您回復一下,謝謝。

代碼是網(wǎng)絡上看到的,測試整理了一下,感謝原作者。

?

?

-------------------------------------------------------------------------------------------

?

?

C#實現(xiàn)SQLSERVER2000數(shù)據(jù)庫備份還原的兩種方法 (帶進度條)

  • C#實現(xiàn)SQLSERVER2000數(shù)據(jù)庫備份還原的兩種方法
  • :方法一(不使用SQLDMO):
  • ///
  • ///備份方法
  • ///
  • SqlConnectionconn=newSqlConnection("Server=.;Database=master;UserID=sa;Password=sa;");
  • SqlCommandcmdBK=newSqlCommand();
  • cmdBK.CommandType=CommandType.Text;
  • cmdBK.Connection=conn;
  • cmdBK.CommandText=@"backupdatabasetesttodisk='C:/ba'withinit";
  • try
  • {
  • conn.Open();
  • cmdBK.ExecuteNonQuery();
  • MessageBox.Show("Backupsuccessed.");
  • }
  • catch(Exceptionex)
  • {
  • MessageBox.Show(ex.Message);
  • }
  • finally
  • {
  • conn.Close();
  • conn.Dispose();
  • }
  • ///
  • ///還原方法
  • ///
  • SqlConnectionconn=newSqlConnection("Server=.;Database=master;UserID=sa;Password=sa;Trusted_Connection=False");
  • conn.Open();
  • //KILLDataBaseProcess
  • SqlCommandcmd=newSqlCommand("SELECTspidFROMsysprocesses,sysdatabasesWHEREsysprocesses.dbid=sysdatabases.dbidANDsysdatabases.Name='test'",conn);
  • SqlDataReaderdr;
  • dr=cmd.ExecuteReader();
  • ArrayListlist=newArrayList();
  • while(dr.Read())
  • {
  • list.Add(dr.GetInt16(0));
  • }
  • dr.Close();
  • for(inti=0;i<list.Count;i++)
  • {
  • cmd=newSqlCommand(string.Format("KILL{0}",list),conn);
  • cmd.ExecuteNonQuery();
  • }
  • SqlCommandcmdRT=newSqlCommand();
  • cmdRT.CommandType=CommandType.Text;
  • cmdRT.Connection=conn;
  • cmdRT.CommandText=@"restoredatabasetestfromdisk='C:/ba'";
  • try
  • {
  • cmdRT.ExecuteNonQuery();
  • MessageBox.Show("Restoresuccessed.");
  • }
  • catch(Exceptionex)
  • {
  • MessageBox.Show(ex.Message);
  • }
  • finally
  • {
  • conn.Close();
  • }
  • 方法二(使用SQLDMO):
  • ///
  • ///備份方法
  • ///
  • SQLDMO.Backupbackup=newSQLDMO.BackupClass();
  • SQLDMO.SQLServerserver=newSQLDMO.SQLServerClass();
  • //顯示進度條
  • SQLDMO.BackupSink_PercentCompleteEventHandlerprogress=newSQLDMO.BackupSink_PercentCompleteEventHandler(Step);
  • backup.PercentComplete+=progress;
  • try
  • {
  • server.LoginSecure=false;
  • server.Connect(".","sa","sa");
  • backup.Action=SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
  • backup.Database="test";
  • backup.Files=@"D:/test/myProg/backupTest";
  • backup.BackupSetName="test";
  • backup.BackupSetDescription="Backupthedatabaseoftest";
  • backup.Initialize=true;
  • backup.SQLBackup(server);
  • MessageBox.Show("Backupsuccessed.");
  • }
  • catch(Exceptionex)
  • {
  • MessageBox.Show(ex.Message);
  • }
  • finally
  • {
  • server.DisConnect();
  • }
  • this.pbDB.Value=0;
  • ///
  • ///還原方法
  • ///
  • SQLDMO.Restorerestore=newSQLDMO.RestoreClass();
  • SQLDMO.SQLServerserver=newSQLDMO.SQLServerClass();
  • //顯示進度條
  • SQLDMO.RestoreSink_PercentCompleteEventHandlerprogress=newSQLDMO.RestoreSink_PercentCompleteEventHandler(Step);
  • restore.PercentComplete+=progress;
  • //KILLDataBaseProcess
  • SqlConnectionconn=newSqlConnection("Server=.;Database=master;UserID=sa;Password=sa;Trusted_Connection=False");
  • conn.Open();
  • SqlCommandcmd=newSqlCommand("SELECTspidFROMsysprocesses,sysdatabasesWHEREsysprocesses.dbid=sysdatabases.dbidANDsysdatabases.Name='test'",conn);
  • SqlDataReaderdr;
  • dr=cmd.ExecuteReader();
  • ArrayListlist=newArrayList();
  • while(dr.Read())
  • {
  • list.Add(dr.GetInt16(0));
  • }
  • dr.Close();
  • for(inti=0;i<list.Count;i++)
  • {
  • cmd=newSqlCommand(string.Format("KILL{0}",list),conn);
  • cmd.ExecuteNonQuery();
  • }
  • conn.Close();
  • try
  • {
  • server.LoginSecure=false;
  • server.Connect(".","sa","sa");
  • restore.Action=SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
  • restore.Database="test";
  • restore.Files=@"D:/test/myProg/backupTest";
  • restore.FileNumber=1;
  • restore.ReplaceDatabase=true;
  • restore.SQLRestore(server);
  • MessageBox.Show("Restoresuccessed.");
  • }
  • catch(Exceptionex)
  • {
  • MessageBox.Show(ex.Message);
  • }
  • finally
  • {
  • server.DisConnect();
  • }
  • this.pbDB.Value=0;
  • ?

    SQLDMO類的使用

    分類:?C#?718人閱讀?評論(0)?收藏?舉報 sql serversqlservermicrosoftdatabasestring數(shù)據(jù)庫

    SQLDMO(SQL Distributed Management Objects,SQL分布式管理對象)封裝 Microsoft SQL Server 2000 數(shù)據(jù)庫中的對象。SQL-DMO 允許用支持自動化或 COM 的語言編寫應用程序,以管理 SQL Server 安裝的所有部分。SQL-DMO 是 SQL Server 2000 中的 SQL Server 企業(yè)管理器所使用的應用程序接口 (API);因此使用 SQL-DMO 的應用程序可以執(zhí)行 SQL Server 企業(yè)管理器執(zhí)行的所有功能。

    SQL-DMO 用于必須包含 SQL Server 管理的任何自動化或 COM 應用程序,例如:?
    1.封裝 SQL Server 作為自己的數(shù)據(jù)存儲并想盡量減少用戶的 SQL Server 管理任務的應用程序。
    2.在程序本身并入了專門的管理邏輯的應用程序。
    3.想在自己的用戶界面中集成 SQL Server 管理任務的應用程序。

    SQLDMO對象來自SQLDMO.dll,SQLDMO.dll是隨SQL Server2000一起發(fā)布的。SQLDMO.dll自身是一個COM對象,因此,在你的.NET項目里必須先引用它。


    privatevoidButton3_Click(objectsender,?System.EventArgs?e)
    {
    ????//引用SQLDMO.dll,SQLDMO由Microsoft?SQL?Server自帶的SQLDMO.dll提供,SQLDMO.dll是一個COM對象
    ????SQLDMO.Backup?backup=new?SQLDMO.BackupClass();
    ????SQLDMO.SQLServer?sqlserver=new?SQLDMO.SQLServerClass();
    ????sqlserver.LoginSecure=false;
    ????sqlserver.Connect("localhost","sa","1");
    ????backup.Action=SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
    ????backup.Database="userdb";
    ????backup.Files=@"E:/Project/meng/data/userdb.bak";
    ????backup.BackupSetName="userdb";
    ????backup.BackupSetDescription="數(shù)據(jù)庫備份";
    ????backup.Initialize=true;
    ????backup.SQLBackup(sqlserver);
    }


    privatevoidButton4_Click(objectsender,?System.EventArgs?e)
    {
    ????SQLDMO.Restore?restore=new?SQLDMO.RestoreClass();
    ????SQLDMO.SQLServer?sqlserver=new?SQLDMO.SQLServerClass();
    ????sqlserver.LoginSecure=false;
    ????sqlserver.Connect("192.168.19.25","sa","sa");????????????restore.Action=SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
    ????restore.Database="userdb";
    ????restore.Files=@"E:/Project/meng/data/userdb.bak";
    ????restore.BackupSetName="userdb";????????????
    ????restore.FileNumber=1;
    ????restore.SQLRestore(sqlserver);
    }

    //得到指定SQL服務器所有數(shù)據(jù)庫的列表
    publicArrayList?GetDataBaseList(stringServerName,stringUserName,stringPwd)
    ????????{
    ????????????ArrayList?list?=?new?ArrayList()?;?
    ????????????SQLDMO.Application?sqlApp?=?new?SQLDMO.Application()?;?
    ????????????SQLDMO.SQLServer?oServer?=?new?SQLDMO.SQLServer()?;?
    ????????????
    ????????????oServer.Connect(ServerName,UserName,Pwd);
    ????????????foreach(SQLDMO.Database?db?in?oServer.Databases)?
    ????????????{?
    ????????????????if((db.Name!=null)?&&?(db.SystemObject?==?false))
    ????????????????????list.Add(db.Name);
    ????????????}
    ?????????????
    ????????????return?list?;?
    ????????}


    ????????//得到SQL服務器的列表
    publicArrayList?GetSqlServerList()
    ????????{????
    ????????????ArrayList?list?=?new?ArrayList()?;?
    ????????????SQLDMO.Application?sqlApp?=?new?SQLDMO.Application();????????????
    ????????????SQLDMO.NameList?ServerName?=?sqlApp.ListAvailableSQLServers();????????????
    ????????????for(int?i=0;i<ServerName.Count;i++)
    ????????????{
    ????????????????list.Add(ServerName.Item(i+1));
    ????????????}
    ????????????
    ????????????return?list;
    ????????}

    轉(zhuǎn)載于:https://www.cnblogs.com/meimao5211/p/3339892.html

    總結

    以上是生活随笔為你收集整理的[整理] C#调用SQLDMO.DLL时间数据库备份 / 还原。 (香神无涯) // C#实现SQLSERVER2000数据库备份还原的两种方法 (带进度条)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。