C#+Sql数据库备份
?
1.在項(xiàng)目中添加SQLDmo dll文件引用(SQLDMO(SQL Distributed Management Objects,SQL分布式管理對象))
2在相應(yīng)頁面加using SQLDMO引用
3.下面是用C#語言書寫的用于Microsoft SQL Server數(shù)據(jù)庫備份和恢復(fù)的類:
using System;
namespace DbService
{
/// <summary>
/// DbOper類,主要實(shí)現(xiàn)對Microsoft SQL Server數(shù)據(jù)庫的備份和恢復(fù)
/// </summary>
public sealed class DbOper
{
/// <summary>
/// DbOper類的構(gòu)造函數(shù)
/// </summary>
private DbOper()
{
}
/// <summary>
/// 數(shù)據(jù)庫備份
/// </summary>
public static void DbBackup()
{
try
{
SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
oSQLServer.LoginSecure = false;
oSQLServer.Connect("localhost", "sa", "1234");
oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
oBackup.Database = "Northwind";
oBackup.Files = @"d:\\Northwind.bak";
oBackup.BackupSetName = "Northwind";
oBackup.BackupSetDescription = "數(shù)據(jù)庫備份";
oBackup.Initialize = true;
oBackup.SQLBackup(oSQLServer);
}
catch
{
throw;
}
}
/// <summary>
/// 數(shù)據(jù)庫恢復(fù)
/// </summary>
public static void DbRestore()
{
try
{
SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
oSQLServer.LoginSecure = false;
oSQLServer.Connect("localhost", "sa", "1234");
oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
oRestore.Database = "Northwind";
oRestore.Files = @"d:\\Northwind.bak";
oRestore.FileNumber = 1;
oRestore.ReplaceDatabase = true;
oRestore.SQLRestore(oSQLServer);
}
catch
{
throw;
}
}
}
}
參見在C#中運(yùn)用SQLDMO備份和恢復(fù)Microsoft SQL Server數(shù)據(jù)庫
http://dev.csdn.net/develop/article/28/28564.shtm
當(dāng)不使用要恢復(fù)的數(shù)據(jù)庫時(shí)以上方法可行,但當(dāng)你使用了數(shù)據(jù)庫時(shí)就必須殺死該進(jìn)程
代碼如下:
??/// <summary>
??/// 還原數(shù)據(jù)庫函數(shù)
??/// </summary>
??/// <param name="strDbName">數(shù)據(jù)庫名</param>
??/// <param name="strFileName">數(shù)據(jù)庫備份文件的完整路徑名</param>
??/// <returns></returns>
??public bool RestoreDB(string strDbName,string strFileName)
??{
???//PBar = pgbMain ;
???SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass() ;
???try
???{
????//服務(wù)器名,數(shù)據(jù)庫用戶名,數(shù)據(jù)庫用戶名密碼
????svr.Connect("localhost","sa","hai") ;
????
????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 ;
????}
??????????????? //殺死使用strDbName數(shù)據(jù)庫的進(jìn)程
????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 ;
????res.Files = strFileName ;
????res.Database = strDbName ;
????res.ReplaceDatabase = true ;
????res.SQLRestore(svr) ;
????return true ;
???}
???catch
???{
????return false;
???}
???finally
???{
????svr.DisConnect() ;
???}
??}
你就可以通過用戶設(shè)置的時(shí)間來備份數(shù)據(jù)庫了,可以用定時(shí)器實(shí)現(xiàn)
或是調(diào)用存儲(chǔ)過程
====================================================================================
SQLDMO(SQL Distributed Management Objects,SQL分布式管理對象)封裝 Microsoft SQL Server 2000 數(shù)據(jù)庫中的對象。SQL-DMO 允許用支持自動(dòng)化或 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í)行的所有功能。
SQL-DMO 用于必須包含 SQL Server 管理的任何自動(dòng)化或 COM 應(yīng)用程序,例如:
1.封裝 SQL Server 作為自己的數(shù)據(jù)存儲(chǔ)并想盡量減少用戶的 SQL Server 管理任務(wù)的應(yīng)用程序。
2.在程序本身并入了專門的管理邏輯的應(yīng)用程序。
3.想在自己的用戶界面中集成 SQL Server 管理任務(wù)的應(yīng)用程序。
SQLDMO對象來自SQLDMO.dll,SQLDMO.dll是隨SQL Server2000一起發(fā)布的。SQLDMO.dll自身是一個(gè)COM對象,因此,在你的.NET項(xiàng)目里必須先引用它。
{
????//引用SQLDMO.dll,SQLDMO由Microsoft?SQL?Server自帶的SQLDMO.dll提供,SQLDMO.dll是一個(gè)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);
}
private?void?Button4_Click(object?sender,?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服務(wù)器所有數(shù)據(jù)庫的列表
????????public?ArrayList?GetDataBaseList(string?ServerName,string?UserName,string?Pwd)
????????{
????????????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服務(wù)器的列表
????????public?ArrayList?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/wangweixznu/archive/2006/04/25/384749.html
總結(jié)
以上是生活随笔為你收集整理的C#+Sql数据库备份的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 版本检查,自动更新
- 下一篇: Using ZipLib to crea