备份恢复SQL Server数据库(C#)

利用C#实现SQL Server数据库备份/恢复一般有以下几种方法:
一、不使用SQLDMO:
Code
/**//// 
///备份方法 
///

try 

    
using(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"
        conn.Open(); 
        cmdBK.ExecuteNonQuery(); 
        MessageBox.Show(
"Backup successed."); 
    }

}

catch(Exception ex) 

    MessageBox.Show(ex.Message); 
}
 

/**//// 
///还原方法 
/// 

try
{
    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[i]), conn); 
        cmd.ExecuteNonQuery(); 
    }
 

    SqlCommand cmdRT 
= new SqlCommand(); 
    cmdRT.CommandType 
= CommandType.Text; 
    cmdRT.Connection 
= conn; 
    cmdRT.CommandText 
= @"restore database test from disk='C:\ba'"
    cmdRT.ExecuteNonQuery(); 
    MessageBox.Show(
"Restore successed."); 
}

catch(Exception ex) 

    MessageBox.Show(ex.Message); 
}
 
这种方法相对较为通用。

二、使用SQLDMO:
Code
/**//// 
///备份方法 
/// 

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(); 
}
  

/**//// 
///还原方法 
/// 

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[i]), 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(); 
}
 

转载于:https://www.cnblogs.com/mywebname/archive/2007/11/28/976256.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值