日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#+Sql数据库备份

發(fā)布時(shí)間:2024/4/11 C# 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#+Sql数据库备份 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

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)目里必須先引用它。


private?void?Button3_Click(object?sender,?System.EventArgs?e)
{
????
//引用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)容,希望文章能夠幫你解決所遇到的問題。

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