iLinux

自由、梦想、飞翔 --- Free Dream Soar

forlinuxID:forlinux
85631次访问,排名1071好友2人,关注者2
forlinux的文章
原创 78 篇
翻译 0 篇
转载 64 篇
评论 74 篇
只爱LINUX的公告
机遇+努力=成功
努力才会有希望...
点击这里给我发消息
最近评论
forlinux:另: 使用 Ndiswrapper时,若linux是64位的,得使用64位的windows驱动程序
bingbingw:谢谢啊,多谢了
vvukqr:WoW Gold
vvukqr:WoW Gold
vvukqr:WoW Gold
文章分类
收藏
相册
只爱这一秒
.NET资源
.net Free soft
dotnet开源
Filehelper-Exp/Imp Data2DB
MSDN-library
Ajax Framework
jquery——The writte less,do more
prototype.js
prototype.js开发者文档
JAVA资源
java开源大全
中国IT实验室ECLIPSE专题
linux资源
202.96.64.144
ChinaUnix网友空间
Cooperative Linux(colinux)
OpenSSH For Windows
Oracle On Linux
Reactos(Wine Base)
Wine模拟器
健兔linux
成都理工大学FTP
班图LINUX
红帽Linux
长江大学FTP
鳥哥的Linux私房菜
lnux社区
linuxsir.org
linux伊甸园
linux公社
PHP资源
Apache with Open SSL
Apache软件历史版本
phpv.net
中日韩翻译
数据库相关
Oracle NetWorking FAQ
友情链接
baidu博客分站
SourceForge主页
漂在生活
闲云
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

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

新一篇: 自己动手,打造数据库通用查询控件(using c#) | 旧一篇: 解决PowerDesigner中Name与Code同步的问题。

//---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#

发表于 @ 2006年12月03日 21:34:00|评论(loading...)|编辑

新一篇: 自己动手,打造数据库通用查询控件(using c#) | 旧一篇: 解决PowerDesigner中Name与Code同步的问题。

评论:没有评论。

发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 只爱LINUX