国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

用ASP.NET還原與恢復Sql server

2024-07-10 13:13:28
字體:
來源:轉載
供稿:網友

上次做了個項目,涉及到數據庫的還原和恢復,到網上找了一下,是利用SQLDMO實現的,只要添加SQLDMO引用就好了,然后利用下邊的類的方法就可以實現了。

  我把原作者的類擴充了一下,可以自動識別web.config里 的數據庫連接字符串,可以通過變量設置還原恢復的信息。

  需要注意的時還原,還原的時候問題最大了,有別的用戶使用數據庫的時候無法還原,解決辦法就是在MASTER數據庫中添加一個存儲過程:

  create proc killspid (@dbname varchar(20))
  as begin declare @sql nvarchar(500)
  declare @spid int set @sql='declare getspid cursor for select spid from sysprocesses where dbid=db_id('''+@dbname+''')' exec (@sql)
  open getspid fetch next from getspid into @spid while @@fetch_status<>-1 begin exec('kill '+@spid
  fetch next from getspid into @spid end close getspid deallocate getspid end GO

  在還原之前先執行這個存儲過程,需要傳遞dbname,就是你的數據庫的名字。下邊是類的原代碼:(web.config里的數據庫連接字符串是constr)

using System;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
namespace web.base_class
...{
/**////
/// DbOper類,主要應用SQLDMO實現對Microsoft SQL Server數據庫的備份和恢復
///
public class DbOper
...{
private string server;
private string uid;
private string pwd;
private string database;
private string conn;
/**////
/// DbOper類的構造函數
///
public DbOper()
...{
conn=System.Configuration.ConfigurationSettings.AppSettings["constr"].ToString(); server=cut(conn,"server=",";");
uid=cut(conn,"uid=",";");
pwd=cut(conn,"pwd=",";");
database=cut(conn,"database=",";");

public string cut(string str,string bg,string ed)
...{
string sub;
sub=str.Substring(str.IndexOf(bg)+bg.Length);
sub=sub.Substring(0,sub.IndexOf(";"));
return sub;

/**////
/// 數據庫備份
///
public bool DbBackup(string url)
...{ SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
try
...{
oSQLServer.LoginSecure = false;
oSQLServer.Connect(server,uid, pwd);
oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
oBackup.Database = database;
oBackup.Files = url;//"d:/Northwind.bak";
oBackup.BackupSetName = database;
oBackup.BackupSetDescription = "數據庫備份"; oBackup.Initialize = true; oBackup.SQLBackup(oSQLServer);
return true;

catch
...{
return false;
throw;

finally 
...{
oSQLServer.DisConnect();


///數據庫恢復 ///
public string DbRestore(string url)
{ if(exepro()!=true)
//執行存儲過程 { return "操作失敗"; } 
else { SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
try { oSQLServer.LoginSecure = false; oSQLServer.Connect(server, uid, pwd);
oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
oRestore.Database = database;
oRestore.Files = url;
//@"d:/Northwind.bak";
oRestore.FileNumber = 1;
oRestore.ReplaceDatabase = true;
oRestore.SQLRestore(oSQLServer);
return "ok"; } catch(Exception e)
{ return "恢復數據庫失敗";
throw;
} finally { oSQLServer.DisConnect();
} } }
private bool exepro()
{ SqlConnection conn1 = new SqlConnection("server="+server+";uid="+uid+";pwd="+pwd+";database=master");
SqlCommand cmd = new SqlCommand("killspid",conn1);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@dbname","port");
try { conn1.Open();
cmd.ExecuteNonQuery();
return true;

catch(Exception ex)
{ return false;
} finally

conn1.Close();



}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 肇庆市| 枞阳县| 扶余县| 寻甸| 南城县| 视频| 灌阳县| 永城市| 渭源县| 内江市| 兰坪| 舟曲县| 香格里拉县| 华亭县| 通山县| 开江县| 沙河市| 合川市| 定西市| 米脂县| 黑龙江省| 玉林市| 大同市| 古交市| 沾益县| 琼海市| 和林格尔县| 襄垣县| 桃源县| 绿春县| 蚌埠市| 美姑县| 淄博市| 兴隆县| 抚宁县| 大理市| 应用必备| 略阳县| 潮安县| 天长市| 庄河市|