C#中结合使用SQLDMO实现备份、还原SQLserver数据库

C# SQL Server数据库备份解决方案 本文还有配套的精品资源,点击获取 简介:本文详细介绍了使用C#语言结合SQL Server数据库进行备份的类库应用,重点在于提供一个专门为C#开发者设计的库,用于简化数据库备份的过程。这个类库包含了预定义的方法和类,允许开发者高效地集成备份功能到他们的应用程序中,同时提供了依赖于SQLDMO组件的详细操作步骤。此外,还提到了更现代的SMO库,它支持更高级的备份选项。 ... 阅读详情

//---DBTools.cs

using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Text;
using  System.Windows.Forms;

namespace  Magicbit.Framework
{
    
public   partial   class  DBTools : Form
    {

        
private   static  DBTools _Instance  =   null ;      
        
public   static  DBTools Instance()      
        {
            
if  (_Instance  ==   null )
            {
                _Instance 
=   new  DBTools();
            }
            
else
            {
                MessageBox.Show(
" 已经有一个实例在运行! " );
            }
            
return  _Instance;
        }

        
        
public  DBTools()
        {
            InitializeComponent();
        }

        
private   void  BackAndRecoverDB_Load( object  sender, EventArgs e)
        {
            
this .txtSavePath.Text  =  Application.StartupPath;
            
// this.GetSQLServerList();
        }
        
private   void  GetSQLServerList()
        {
            
// get all available SQL Servers    
            SQLDMO._Application sqlApp  =   new  SQLDMO.ApplicationClass();
            SQLDMO.NameList sqlServers 
=  sqlApp.ListAvailableSQLServers();
            
for  ( int  i  =   0 ; i  <  sqlServers.Count; i ++ )
            {
                
object  srv  =  sqlServers.Item(i  +   1 );
                
if  (srv  !=   null )
                {
                    
this .cboServers.Items.Add(srv);
                }
            }
            
if  ( this .cboServers.Items.Count  >   0 )
                
this .cboServers.SelectedIndex  =   0 ;
            
else
                
this .cboServers.Text  =   " <No available SQL Servers> " ; 
        
        }
        
private   void  GetBackUpDB()
        {
            SQLDMO.Application sqlApp   
=   new  SQLDMO.ApplicationClass();
            SQLDMO.SQLServer srv        
=   new  SQLDMO.SQLServer();
            srv.Connect(
this .cboServers.Text.Trim(), this .txtUserName.Text.Trim(), this .txtPassword.Text.Trim());
            
foreach  (SQLDMO.Database db  in  srv.Databases)
            {
                
if  (db.Name  !=   null )
                    
this .cboDatabase.Items.Add(db.Name);
            }
        
        }
        
private   void  pictureBox1_Click( object  sender, EventArgs e)
        {
            MessageBox.Show(
" 欢迎使用数据库备份、还原工具,本工具将协助你备份和还原数据库,确保数据安全! " ,  " 备份您的数据库 " );
        }

        
private   void  button1_Click( object  sender, EventArgs e)
        {
            
this .GetBackUpDB();
        }
        
private   void  BackUpDB()
        {

            
string  selfName  =   this .txtSavePath.Text.Trim()  +   @" "   +   this .cboDatabase.Text.Trim()  +   " _ " +  System.DateTime.Now.ToString( " yyyyMMddHHmmss " ) + " .DAT " ;
            
string  deviceName  =   this .cboDatabase.Text.Trim() + " bak " ;
            
string  remark  =   " 数据备份 " ;

            
// BACKUP DB
            SQLDMO.Backup oBackup  =   new  SQLDMO.BackupClass();
            SQLDMO.SQLServer oSQLServer 
=   new  SQLDMO.SQLServerClass();
            oBackup.Action 
=   0  ; 
            oBackup.Initialize 
=   true  ; 
            SQLDMO.BackupSink_PercentCompleteEventHandler pceh 
=   new  SQLDMO.BackupSink_PercentCompleteEventHandler(Step); 
            oBackup.PercentComplete 
+=  pceh; 
            
try
            {
                oSQLServer.LoginSecure 
=   false ;
                oSQLServer.Connect(
this .cboServers.Text.Trim(), this .txtUserName.Text.Trim(), this .txtPassword.Text.Trim());
                oBackup.Action 
=  SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
                oBackup.Database 
=   this .cboDatabase.Text.Trim(); // 数据库名
                oBackup.Files  =  selfName; // 文件路径
                oBackup.BackupSetName  =  deviceName; // 备份名称
                oBackup.BackupSetDescription  =  remark; // 备份描述
                oBackup.Initialize  =   true ;
                oBackup.SQLBackup(oSQLServer);

            }
            
catch (System.Exception ex)
            {
                MessageBox.Show(
" 数据备份失败: "   +  ex.ToString());
            }
            
finally
            {
                oSQLServer.DisConnect();
            }
        }
        
private   void  Step( string  message,  int  percent)
        {
            
this .progressBar1.Value  =  percent;
        }
        
private   void  button2_Click( object  sender, EventArgs e)
        {
            
this .Cursor  =  Cursors.WaitCursor;
            
this .label6.Visible  =   true ;
            
this .progressBar1.Visible  =   true ;
            
this .BackUpDB();
            
this .Cursor  =  Cursors.Default;
            
this .label6.Text  =   " 备份已完成. " ;
        }

        
public   void  RestoreDB()
        { 
            
string  filePath  =   this .txtBackUpFile.Text.Trim();
            SQLDMO.Restore oRestore 
=   new  SQLDMO.RestoreClass();
            SQLDMO.SQLServer oSQLServer 
=   new  SQLDMO.SQLServerClass();
            oRestore.Action 
=   0  ; 
            SQLDMO.RestoreSink_PercentCompleteEventHandler pceh 
=   new  SQLDMO.RestoreSink_PercentCompleteEventHandler(Step); 
            oRestore.PercentComplete 
+=  pceh; 
            
try
            {
            oSQLServer.Connect(
this .cboServers.Text.Trim(), this .txtUserName.Text.Trim(), this .txtPassword.Text.Trim());
            SQLDMO.QueryResults qr 
=  oSQLServer.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  ; 
                } 
                
for ( int  i = 1 ;i <= qr.Rows;i ++ ) 
                { 
                    
int  lPID  =  qr.GetColumnLong(i,iColPIDNum) ; 
                    
string  strDBName  =  qr.GetColumnString(i,iColDbName) ; 
                    
if  (strDBName.ToUpper()  ==   " CgRecord " .ToUpper()) 
                    oSQLServer.KillProcess(lPID) ; 
                } 

                oRestore.Action 
=  SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
                oRestore.Database 
=   this .cboDBtoBackup.Text;
                oRestore.Files 
=  filePath;
                oRestore.FileNumber 
=   1 ;
                oRestore.ReplaceDatabase 
=   true ;
                oRestore.SQLRestore(oSQLServer);

            }
            
catch (System.Exception ex)
            {
                MessageBox.Show(
" 数据还原失败: "   +  ex.ToString());
            }
            
finally
            {
                oSQLServer.DisConnect();
            }


        
        }

        
private   void  button3_Click( object  sender, EventArgs e)
        {
            
this .folderBrowserDialog1.Description  =   " 请选择备份文件存放目录 " ;
            
this .folderBrowserDialog1.ShowNewFolderButton  =   true ;
            
this .folderBrowserDialog1.ShowDialog();
            
this .txtSavePath.Text  =   this .folderBrowserDialog1.SelectedPath;
        }

        
private   void  button4_Click( object  sender, EventArgs e)
        {
            
this .openFileDialog1.DefaultExt  =   " *.dat " ;
            
this .openFileDialog1.Title  =   " 请选择要还原的数据库备份文件. " ;
            
this .openFileDialog1.ShowDialog();
            
this .txtBackUpFile.Text  =   this .openFileDialog1.FileName;
        }

        
private   void  button5_Click( object  sender, EventArgs e)
        {
            
this .Cursor  =  Cursors.WaitCursor;
            
this .label6.Visible  =   true ;
            
this .progressBar1.Visible  =   true ;
            
this .RestoreDB();
            
this .Cursor  =  Cursors.Default;
            
this .label6.Text  =   " 还原已完成. " ;
        }

     


    }
}

相关源码:下载地址一

参考:

SQL-DMO FAQ :http://www.sqldev.net/sqldmo/SQL-DMO-FAQ.htm

SQLDMO For C#

C#将SQL Server备份bak文件恢复 立即下载

相关推荐

SQL Server数据库备份与恢复(C#代码示例)

SQL Server数据库备份与恢复(C#代码示例)为你提示了简洁、易懂的代码示例

使用SQLDMO进行数据库备份与还原

bakServer.cs类     using System; using System.Data; using System.Configuration; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlCo

乘风破浪 1190

sql server sqldmo_x86_x64(C#数据库备份还原很好用的dll)

sql server sqldmo_x86_x64,C#数据库备份还原很好用的.dll,里面有使用方法,引用Interop.SQLDMO.dll后的注意事项。 SQLDMO.dll是个好东西,ASP.NET利用它可以实现在线备份、还原数据库等各种功能。近日有客户要求为其在后台添加一个管理数据库的功能。于是就出现了这篇文章。 由于客户的数据库和WEB服务不再同一台服务器,当我们把网站部署在服务器上以后,运行程序,提示如下错误: Retrieving the COM class factory for component with CLSID {10020200-E260-11CF-AE68-00AA004A34D5} failed due to the following error: 80040154. 而客户又不想在这台电脑安装MSSQL,所以我们只需要在没有安装MSSQL的电脑上注册SQLDMO.DLL组件。 第一步:首先将msvcr71.dll, SQLDMO.DLL, Resources\2052\sqldmo.rll,Resources\1033\sqldmo.rll 拷贝到C:\Program Files\Microsoft SQL Server\80\Tools\Binn目录。 下载SQLDMO文件 第二步:打开开始,在运行中输入 regsvr32 "C:\Program Files\Microsoft SQL Server\80\Tools\Binn\sqldmo.dll" 注册sqldmo.dll。 正常情况下,经过以上两个步骤,网页就应该可以访问了的。 但是我们经过以上两次操作后,访问网页依然提示如下错误: Retrieving the COM class factory for component with CLSID {10020200-E260-11CF-AE68-00AA004A34D5} failed due to the following error: 80070005.后经过一段时间的检查,我们发现C:\Program Files\文件夹仅有Administrator和System的控制权限,而没有其他任何用户的权限,因此我们为Microsoft SQL Server文件夹增加上Network Service 的读取权限。 至此,问题得到解决!

在c#中运用sqldmo备份和恢复sqlserver数据库(重点)

我们知道,用SQLDMO可以实现对数据库的备份与恢复,下面给出简单的实现方法。首先需要添加对SQLDMO引用1.实现数据库的备份: 1/**////&lt;summary&gt;2///数据库备份3///&lt;/summary&gt;4///&lt;returns&gt;备份是否成功&lt;/returns&gt;5publicboolDbBackup()6{7stringpath=Create...

web开发自学 179

数据备份软件(Linux版;支持文件、MySQL、SQLServer)

本软件服务器端基于linux平台,客户端支持linux,windows,aix等平台,支持文件、mysql、mssql、oracle等数据的应用级备份及热备份。通过私有数据传输协议,将用户数据分块去重、压缩、加密后,传输到云端存储系统(通常称为对象存储),达到用户数据备份目的。在用户需要的时候,将用户需要的数据,通过从对象存储里面获取并传输到客户端,进行解密,解压,数据块组装等操作,达到数据的恢复、提取、迁移等目的。 使用方法:root权限登录需要安装客户端的机器,运行命令:bash dbfen_instll.sh(下载下来的脚本文件),后面根据提示运行就OK了,详情可以咨询QQ2401067468

Zynq7000双核裸机开发实战:如何安全实现共享内存与乒乓RAM设计

本文深入探讨了Zynq7000双核裸机开发中的共享内存与乒乓RAM设计,重点解析了核间通信的Cache一致性处理机制和硬件级实现方案。通过实战代码示例和性能优化技巧,帮助开发者解决双核运行中的访问冲突问题,提升嵌入式系统开发效率。

weixin_29191669的博客 375

C# sqlserver 数据库备份与还原(winform版)

数据库备份与还原的sql语句 //数据库备份 backup database northwind to disk='c:\dbbackup\northwind.bak'; //数据库还原 //数据库还原 use master; alter database northwind set offline with rollback immediate restore database northwi...

一根火柴博客 2303

自动驾驶仿真工具链集成:ECU TEST与VTD、VERISTAND的深度配置指南

本文详细介绍了自动驾驶仿真测试中ECU TEST、VTD与VERISTAND三大核心工具的深度集成与连接配置方法。通过解析工具链的角色分工,提供从单机到分布式部署的实战指南,并重点阐述了Test Bench Configuration与Test Configuration的关键参数设置、SSH免密登录配置,以及在线与离线工作模式的切换技巧,旨在帮助测试工程师高效构建稳定、自动化的硬件在环测试环境。

wind6的博客 789

sqlserver 定时任务同步数据

1. 打开 Sql server Management Studio Sql server Management Studio 微软提供了专门操作SQLServer数据库的工具:SQL Server Management Studio, 管理工具的版本最好比数据库的版本大,比如数据库用的是SQLServer2012的,管理工具也用2012版 或者更高版本的。 如果没有请自行下载 2. 通过管理工具连接数据库 若失败,请检查地址,用户名以及密码 3. 创建测试数据(测试用,可忽略..

小灰~的博客 6814

从零开始用飞牛fnas搭建集成DeepSeek-R1的远程AI工作台

从零开始用飞牛fnas搭建集成DeepSeek-R1的远程AI工作台

AI+全栈,AI+应用,实操落地,前沿技术 3806

CH340驱动安装全攻略:从Windows到MacOS的避坑指南(2025最新版)

本文提供2025年最新版CH340驱动安装全攻略,涵盖Windows、MacOS和Linux三大操作系统。详细解析了驱动安装的核心原理、标准流程,并针对Windows设备管理器报错、MacOS系统安全限制等常见“坑点”提供了深度排错与解决方案,旨在帮助开发者快速稳定地完成USB转串口通信配置。

earth的博客 426

枚举局域网内所有的 SQL Server 服务器实例名

如果希望检查一个指定名称的 SQL Server 服务器是否存在,或希望给用户一个自己挑选需要连接的 SQL 服务器的话,就需要先枚举出局域网内所有的 SQL Server 服务器实例名称。我所知的方法有三种:1. 使用 SQLDMO 对象的 ListAvailableSQLServers 方法   loSqlDMO = CreateObject(SQLDMO.Application)  

都市夜猫的专栏 4136

cartographer基于3d地图的纯定位模式

关于纯定位模式呢,本人试过2d和3d,怎么说呢,有条件的话,建议直接上3d,因为博主当初在做定位时针对室内和室外都尝试过,2d只在室内环境下效果会很棒,但是在室外就呵呵啦!所以这里直接讲解3d室外定位(建图篇请自己查看我之前的博客:[3d建图](https://blog.youkuaiyun.com/qq_40216084/article/details/105531983) 看了我之前的博客大概知道配置文件和源文件路径了,我这里就不把路径写出来了,挺麻烦的。直接讲怎么做把,有不懂的留言,看到了我一定知无不言。 **首

qq_40216084的博客 5552

C#实现对数据库的备份还原(完全)

C#实现对数据库的备份还原 ( 用SQL语句实现对数据库备份还原操作 备份SqlServer数据库:  backup database 数据库名 to disk (备份文件存放路径+文件名).bak   还原SqlServer数据库:  string path = this.FileUpload1.PostedFile.File...

weixin_38167363的博客 1029

ESD防护设计宝典(十一):CE(传导发射)超标问题排查与解决

(Conducted Emission, CE),亦称为传导骚扰,是电子电气设备或系统内部的电压、电流通过信号线、电源线或地线向外传输,对其他电子电气设备或系统造成电磁干扰的物理现象。其。

m0_56451176的博客 856

数据权限设计

随着IT新技术不断完善成熟,企业数字化建设得到全面的发展,数据将成为一个创造财富的重要来源,并且越来越多地被视为一项值得重视的企业资产。未来,很多企业之间的竞争,其实也是资源和数据竞争。那么针对数据资产,如何保障它的安全性呢?数据的权限管理无疑是必不可少的。数据权限从数据源来控制不同的用户能够查看、使用和授权不同的数据表数据(其实就是数据表行列的管控),就如同筑起了一道道护城墙,为数据安全提供了保障。

qq_40664711的博客 1万+

C#实现杀掉MSSQL中数据库当前连接的所有进程(进行数据还原的时候需要用到)

//不好意思,上次少了句最重要的话,光找到没有KILL了^_^//后来在网上发现有两种方式实现SQLSERVER2000数据库备份还原,也一起放到下面了//结束目标数据库的所有当前用户的连接 SqlConnection conn = new SqlConnection(); conn.C; conn.Op

JOJO的专栏 1696

不同IP网段的PLC进行S7通信(PUT_GET)的具体步骤

不同IP网段的PLC进行S7通信(PUT_GET)的具体步骤 一般情况下,我们使用西门子的S7通信时都是将网络中的PLC的IP设置在同一网段,那么如果涉及到旧项目改造时,不方便修改IP地址,只能进行2个网段通信时,可以参考以下步骤: 准备条件: 2个路由器 CPU 1212C 主动连接 CPU 314C-2PN/DP 被动连接 网络搭建如下图所示: S7-1212C一侧 建立S7主动连接 ,IP地址:192.168.5.40,编写get/put 通信程序 S7-300 IP地址:192.168.0

Robot_PLC_HMI_Automation 2万+

在C#中运用SQLDMO备份和恢复Microsoft SQL Server数据库

在C#中运用SQLDMO备份和恢复Microsoft SQL Server数据库      SQLDMO(SQL Distributed Management Objects,SQL分布式管理对象)封装了Microsoft SQL Server数据库中的对象。SQLDMO是Microsoft SQL Server中企业管理器所使用的应用程序接口,所以它可以执行很多功能,其中当然也包括对数

陈瑞川的专栏 1867

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

SQL Server 2008 中使用SQLDMO 备份数据 还原数据等

由于需要在程序中加上数据库的备份与恢复功能,所以需要使用到SQLDMO。 但在系统中没有找到SQLDMO.dll,然后谷歌之,发现msdn上这样说: “后续版本的 Microsoft SQL Server 将删除该功能。” 于是继续谷歌,发现需要安装Microsoft SQL Server 2005 向后兼容组件 这里下载: Microsoft SQL Server 2005

1710

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

asp.net/C# 备份与还原SqlServer数据库

asp.net/C# 备份与还原数据库功能:   自动识别Web.Config配置信息.   备份与还原数据库.代码如下:using System;using System.Configuration;using System.Data.SqlClient;using System.Data;namespace OA.Web{    ///      /// SqlDbBackUpRestore类

Feiin的专栏 3100

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: 解决PowerDesigner中Name与Code同步的问题。
下一篇: 自己动手,打造数据库通用查询控件(using c#)
forlinux
博客等级 码龄21年 53粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值