|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我之所以想学。NET,是因为一直觉的BILLGATES好厉害,希望有一天能去微软,虽然现在还距离遥远,呵呵:)该功效次要仍是挪用sqlserver中的backup与restore来完成sqlserver数据库的复原与备份,小编将两个功效分离写成两个办法,列位在程序中间接挪用便可。
一,备份数据库
///<summary>
///备份数据库
///</summary>
///<paramname="databasename">数据库称号</param>
///<paramname="filepath">备份地点</param>
///<paramname="istype">1完全数据库2仅备份日记</param>
publicstaticvoidBackUp(stringdatabasename,stringfilepath,stringbackupname,byteistype,boolisFormat)
{
StringBuildersql=newStringBuilder();
switch(istype)
{
case1:
sql.Append("backupdatabase"+databasename+"todisk=N"+filepath+"withSTATS=10");
break;
case2:
sql.Append("backuplog"+databasename+"todisk=N"+filepath+"withSTATS=10");
break;
case3:
sql.Append("backupdatabase"+databasename+"todisk=N"+filepath+"withdifferential,STATS=10");
break;
default:break;
}
sql.Append(",name=N"+backupname+"");
if(isFormat)
sql.Append(",format");
using(SqlConnectionconn=SqlConn())
{
conn.Open();
using(SqlCommandcmd=newSqlCommand())
{
cmd.Connection=conn;
cmd.CommandText=sql.ToString();
cmd.CommandType=CommandType.Text;
cmd.ExecuteNonQuery();
}
}
}
下面代码中的C#代码就不必注释了,都是一些对sqlserver最基本的操纵,注释一下sql:
backupdatabase要备份的数据库称号--备份指定的数据库
todisk--备份文件寄存的地位
stats--备份完成指定的百分比后就前往一条动静,好比这里stats=10就是当备份完成10%就前往一条动静,这个也是默许值,假如我们不设置stats,默许就是10.
differential--仅备份与前次完全备份有差别的部分,也就是备份差别数据库,默许情形下是备份完全数据库
format--是不是格局化备份介质,假如设置该项,则备份文件会格局化选中的备份文件,不然会在选中的备份文件上累加。
backuplog要备份的数据库称号--备份指定命据库日记文件
2、复原数据库
///<summary>
///复原数据库
///</summary>
///<paramname="databasename">数据库称号</param>
///<paramname="filepath"></param>
publicstaticvoidReStore(stringdatabasename,stringfilepath)
{
try
{
stringsql=@"usemaster
declare@dbnamevarchar(50)
set@dbname="+databasename+"";
sql=string.Concat(sql,@"declare@sqlvarchar(50)
declarecs_resultcursorlocalforselectkill+cast(spidasvarchar(50))fromsys.sysprocesses
wheredb_name(dbid)=@dbname
opencs_result
fetchnextfromcs_resultinto@sql
while@@fetch_status=0
begin
execute(@sql)
fetchnextfromcs_resultinto@sql
end
closecs_result
deallocatecs_result
");
sql=string.Concat(sql,@"restoredatabase"+databasename+"fromdisk="+filepath+"withreplace");
using(SqlConnectionconn=SqlConn())
{
conn.Open();
using(SqlCommandcmd=newSqlCommand())
{
cmd.Connection=conn;
cmd.CommandText=sql;
cmd.CommandType=CommandType.Text;
cmd.ExecuteNonQuery();
}
}
}
catch(SqlExceptionex)
{
throwex;
}
}
注释一下下面的sql:
declare@sqlvarchar(50)
declarecs_resultcursorlocalforselectkill+cast(spidasvarchar(50))fromsys.sysprocesseswheredb_name(dbid)=@dbname
opencs_result
fetchnextfromcs_resultinto@sql
while@@fetch_status=0
begin
execute(@sql)
fetchnextfromcs_resultinto@sql
end
closecs_result
deallocatecs_result
该段sql是中断一切正在利用要复原数据库的历程,由于复原数据库请求对该数据库具有独有权限。
restoredatabase要复原的数据库称号--复原数据库
fromdisk--备份文件的地点
replace--是不是掩盖原无数据库,这个选项与我们在SQLServerManagementStudio中复原数据的"掩盖现无数据库"选项功效一样。
注重:由SQLServer的较新版本创立的备份将没法在SQLServer的初期版本中复原
两个办法就写完了,怎样,备份与复原数据库仍是挺复杂的吧。它有很多缺点的,有兴趣可以到网上去搜索一下。于是微软有发明了“下一代”C++:C++/CLI语言,这个可以解决在.NETFramework中,托管C++产生的问题。在《程序员》杂志上,lippman和李建中合作连载介绍了C++/CLI语言。 |
|