C#实现SQLSERVER2000数据库备份还原的两种方法

本文介绍使用C#实现SQL Server 2000数据库备份和还原的两种方法:一种是通过SQL语句直接操作,另一种是利用SQLDMO组件进行备份与还原,并附带进度显示及进程终止功能。
使用.net备份和还原数据库
C#实现SQLSERVER2000数据库备份还原的两种方法
: 方法一(不使用SQLDMO):

///
/// 备份方法
///
SqlConnection conn = new SqlConnection( " Server=.;Database=master;User ID=sa;Password=sa; " );

SqlCommand cmdBK
= new SqlCommand();
cmdBK.CommandType
= CommandType.Text;
cmdBK.Connection
= conn;
cmdBK.CommandText
= @" backup database test to disk='C:/ba' with init " ;

try
{
conn.Open();
cmdBK.ExecuteNonQuery();
MessageBox.Show(
" Backup successed. " );
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
conn.Dispose();
}


///
/// 还原方法
///
SqlConnection conn = new SqlConnection( " Server=.;Database=master;User ID=sa;Password=sa;Trusted_Connection=False " );
conn.Open();

// KILL DataBase Process
SqlCommand cmd = new SqlCommand( " SELECT spid FROM sysprocesses ,sysdatabases WHERE sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name='test' " , conn);
SqlDataReader dr;
dr
= cmd.ExecuteReader();
ArrayList list
= new ArrayList();
while (dr.Read())
{
list.Add(dr.GetInt16(
0 ));
}
dr.Close();
for ( int i = 0 ; i < list.Count; i ++ )
{
cmd
= new SqlCommand( string .Format( " KILL {0} " , list), conn);
cmd.ExecuteNonQuery();
}

SqlCommand cmdRT
= new SqlCommand();
cmdRT.CommandType
= CommandType.Text;
cmdRT.Connection
= conn;
cmdRT.CommandText
= @" restore database test from disk='C:/ba' " ;

try
{
cmdRT.ExecuteNonQuery();
MessageBox.Show(
" Restore successed. " );
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
}





方法二(使用SQLDMO):

///
/// 备份方法
///
SQLDMO.Backup backup = new SQLDMO.BackupClass();
SQLDMO.SQLServer server
= new SQLDMO.SQLServerClass();
// 显示进度条
SQLDMO.BackupSink_PercentCompleteEventHandler progress = new SQLDMO.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
= " Backup the database of test " ;
backup.Initialize
= true ;
backup.SQLBackup(server);
MessageBox.Show(
" Backup successed. " );
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
server.DisConnect();
}
this .pbDB.Value = 0 ;


///
/// 还原方法
///
SQLDMO.Restore restore = new SQLDMO.RestoreClass();
SQLDMO.SQLServer server
= new SQLDMO.SQLServerClass();
// 显示进度条
SQLDMO.RestoreSink_PercentCompleteEventHandler progress = new SQLDMO.RestoreSink_PercentCompleteEventHandler(Step);
restore.PercentComplete
+= progress;

// KILL DataBase Process
SqlConnection conn = new SqlConnection( " Server=.;Database=master;User ID=sa;Password=sa;Trusted_Connection=False " );
conn.Open();
SqlCommand cmd
= new SqlCommand( " SELECT spid FROM sysprocesses ,sysdatabases WHERE sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name='test' " , conn);
SqlDataReader dr;
dr
= cmd.ExecuteReader();
ArrayList list
= new ArrayList();
while (dr.Read())
{
list.Add(dr.GetInt16(
0 ));
}
dr.Close();
for ( int i = 0 ; i < list.Count; i ++ )
{
cmd
= new SqlCommand( 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(
" Restore successed. " );
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
server.DisConnect();
}
this .pbDB.Value = 0 ;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值