[整理] C#调用SQLDMO.DLL时间数据库备份 / 还原。 (香神无涯) // C#实现SQLSERVER2000数据库备份还原的两种方法 (带进度条)
/// <summary>
/// 通过调用MSSQL的SQLDMO.DLL文件来实现备份数据库
/// 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"; //数据库名字
dbBackup.Files = @"d:\kuang_bak.bak"; //备份位置
dbBackup.BackupSetName = "kuang"; //名称,在企业管理器里面选择备份的时候也有这个,貌似没用。
dbBackup.BackupSetDescription = "数据库备份"; //描述,在企业管理器里面选择备份的时候也有这个,貌似没用。
dbBackup.Initialize = true;
dbBackup.SQLBackup(sqlServer);
}
catch
{
throw;
}
finally
{
sqlServer.DisConnect();
}
}
/// <summary>
/// 通过调用MSSQL的SQLDMO.DLL文件来实现从备份文件恢复到是数据库
/// 注:恢复是数据库必须是没有链接的。清楚链接的方法:在企业管理器右击数据库-->分离数据库-->点击清楚按钮即可
/// </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);
}
在回复的过程中,需要保证数据库没有正在使用,网上看到的代码经测试没有效果,如果有朋友知道方法的恳请您回复一下,谢谢。
代码是网络上看到的,测试整理了一下,感谢原作者。
-------------------------------------------------------------------------------------------
- C#实现SQLSERVER2000数据库备份还原的两种方法
- :方法一(不使用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(SQL Distributed Management Objects,SQL分布式管理对象)封装 Microsoft SQL Server 2000 数据库中的对象。SQL-DMO 允许用支持自动化或 COM 的语言编写应用程序,以管理 SQL Server 安装的所有部分。SQL-DMO 是 SQL Server 2000 中的 SQL Server 企业管理器所使用的应用程序接口 (API);因此使用 SQL-DMO 的应用程序可以执行 SQL Server 企业管理器执行的所有功能。
SQL-DMO 用于必须包含 SQL Server 管理的任何自动化或 COM 应用程序,例如:
1.封装 SQL Server 作为自己的数据存储并想尽量减少用户的 SQL Server 管理任务的应用程序。
2.在程序本身并入了专门的管理逻辑的应用程序。
3.想在自己的用户界面中集成 SQL Server 管理任务的应用程序。
SQLDMO对象来自SQLDMO.dll,SQLDMO.dll是随SQL Server2000一起发布的。SQLDMO.dll自身是一个COM对象,因此,在你的.NET项目里必须先引用它。
private void Button3_Click(object sender, 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="数据库备份";
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服务器所有数据库的列表
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服务器的列表
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;
}[整理] C#调用SQLDMO.DLL时间数据库备份 / 还原。 (香神无涯) // C#实现SQLSERVER2000数据库备份还原的两种方法 (带进度条)的更多相关文章
- C++调用DLL有两种方法——静态调用和动态调用
C++调用DLL有两种方法——静态调用和动态调用 标签: dllc++winapinullc 2011-09-09 09:49 11609人阅读 评论(0) 收藏 举报 分类: cpp(30) [ ...
- 织梦首页、列表页调用文章body内容的两种方法
http://blog.csdn.net/langyu1021/article/details/52261411 关于首页.列表页调用文章body内容的两种方法,具体方法如下: 第一种方法: {ded ...
- 转载]PhpCms V9调用指定栏目子栏目文章的两种方法
PhpCms V9调用指定栏目子栏目文章的两种方法 第一种.直接写子栏目id ,用cat in {pc:get sql="SELECT * from v9_news where status ...
- C++连接mysql数据库的两种方法
本文主要介绍了C++连接mysql数据库的两种方法,希望通过本文,能对你有所帮助,一起来看. 现在正做一个接口,通过不同的连接字符串操作不同的数据库.要用到mysql数据库,以前没用过这个数据库,用a ...
- C#实现Dll(OCX)控件自动注册的两种方法 网上找的 然后 自己试了试 还是可以用的
尽管MS为我们提供了丰富的.net framework库,我们的程序C#开发带来了极大的便利,但是有时候,一些特定功能的控件库还是需要由第三方提供或是自己编写.当需要用到Dll引用的时候,我们通常会通 ...
- C#实现Dll(OCX)控件自动注册的两种方法
尽管MS为我们提供了丰富的.net framework库,我们的程序C#开发带来了极大的便利,但是有时候,一些特定功能的控件库还是需要由第三方提供或是自己编写.当需要用到Dll引用的时候,我们通常会通 ...
- 在Delphi中使用C++对象(两种方法,但都要改造C++提供的DLL)
Delphi是市场上最好的RAD工具,但是现在C++占据着主导地位,有时针对一个问题很难找到Delphi或Pascal的解决方案.可是却可能找到了一个相关的C++类.本文描述几种在Delphi代码中使 ...
- C#自动实现Dll(OCX)控件注册的两种方法
尽管MS为我们提供了丰富的.net framework库,我们的程序C#开发带来了极大的便利,但是有时候,一些特定功能的控件库还是需要由第三方提供或是自己编写.当需要用到Dll引用的时候,我们通常会通 ...
- SQL Server中灾难时备份结尾日志(Tail of log)的两种方法
转自:http://www.cnblogs.com/CareySon/archive/2012/02/23/2365006.html SQL Server中灾难时备份结尾日志(Tail of log) ...
随机推荐
- Android基础TOP2:单机按钮改变字体颜色
---恢复内容开始--- Activity: <TextView android:id="@+id/t1" android:textSize="30dp" ...
- JS高级——缓存原理
缓存的原理 1.就是将常用的数据存储起来,提供便利,减少查询次数和所消耗的事件 2.利用作用的原理所产生的数据库:非关系型数据库(内存型数据库) MongoDB.Redis等 3.还有网站静态页面缓存 ...
- C#——工厂模式
之前我们接介绍了简单工厂,这次我们介绍一种更为常用的模式——工厂模式. 工厂方法模式Factory Method,又称多态性工厂模式.在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体 ...
- [Windows Server 2012] Filezilla安装方法
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:FileZ ...
- 在PHP中调用php_ssh实现远程登陆linux服务器并执行shell脚本。
这个功能主要用于在web端利用程序对远程服务器进行操作,通过PHP_ssh执行shell脚本来实现. 首先要安装php_ssh2组件,linux中centos7下有ssh2源,直接安装.window下 ...
- PHP 之中文转为拼音
/** * Created by PhpStorm. * User: Administrator * Date: 2019/1/2 0002 * Time: 下午 1:01 */ class PinY ...
- 原生Ajax的使用——含开放API接口
看了两天关于Ajax的使用,总感觉云里雾里的. 故在此总结梳理一下,如果疏漏错误还请纠正支出. Ajax能够在向服务器请求额外的数据时,不必重新加载/卸载整个页面,实现一小块区域性的刷新,也是常说的异 ...
- 在引入的css或者js文件后面加参数的作用
有时候可能会遇到js或者css文件引用后传递参数: css和js带参数(形如.css?v=与.js?v=) <script type=”text/javascript” src=”jb51.js ...
- C++数组查重
今天课上实验课,遇到一道题目,需要查找一个数组中出现次数最多的元素和次数,并且输出.第一次用struct模拟字典,十分麻烦而且复杂度是O(n*n).其实,运用转化的思想,可以先将其排序,然后再查找即可 ...
- Java基础学习总结(70)——开发Java项目常用的工具汇总
要想全面了解java开发工具,我们首先需要先了解一下java程序的开发过程,通过这个过程我们能够了解到java开发都需要用到那些工具. 首先我们先了解完整项目开发过程,如图所示: 从上图中我们能看到一 ...