通常,ASP.NET无法实现自动备份,因为,在网站空闲时,web服务器会收回ASP.NET进程,导致定时器失败(也有通过代码,让网站总是繁忙,这样web服务器就不会收回他的)。
但是,基本上推荐还是用windows服务或者exe实现数据库备份。
从技术上而言,本身,使用.NET实现数据库备份非常简单。
string db="XXX"string sql = " use " + db + " backup database " + db + " to disk=@'c:\back\abc.bak'"
只要使用SqlCommand对象执行上面SQL,即可备份数据库。
使用SQLDMO代码如下:
using System
using System.Collections.Generic
using System.Text
using System.Windows.Forms
using System.IO
namespace LoaMen.Com.Sql
{
/// <summary>
/// create by loamen http://www.loamen.com
/// </summary>
public class SqlServerHelper
{
string connectionString = string.Empty
string dbServer, dbUser, dbPassword, dbName
private string _fileName
/// <summary>
/// 文件全路径
/// </summary>
public string FileName
{
get { return _fileName}
set { _fileName = value}
}
public SqlServerHelper()
{
string[] connectionString = PubConstant.ConnectionString.Split('')
foreach (string str in connectionString)
{
if (str.ToLower().Contains("data source"))
{
dbServer = str.Split('=')[1]
}
else if (str.ToLower().Contains("initial catalog"))
{
dbName = str.Split('=')[1]
}
else if (str.ToLower().Contains("user id"))
{
dbUser = str.Split('=')[1]
}
else if (str.ToLower().Contains("pwd"))
{
dbPassword = str.Split('=')[1]
}
}
}
private bool checkDB()
{
if (!string.IsNullOrEmpty(dbServer) &&
!string.IsNullOrEmpty(dbName) &&
!string.IsNullOrEmpty(dbUser) &&
!string.IsNullOrEmpty(dbPassword))
{
return true
}
else
{
return false
}
}
/// <summary>
/// 数据库备份
/// </summary>
public void DbBackup()
{
if (checkDB())
{
SQLDMO.Backup oBackup = new SQLDMO.BackupClass()
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass()
try
{
oSQLServer.LoginSecure = false
oSQLServer.Connect(dbServer, dbUser, dbPassword)
oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database
oBackup.Database = dbName
FileInfo fileInfo = new FileInfo(this.FileName)
oBackup.Files = fileInfo.FullName
oBackup.BackupSetName = dbName
oBackup.BackupSetDescription = "数据库备份"
oBackup.Initialize = true
oBackup.SQLBackup(oSQLServer)
}
catch (Exception ex)
{
throw ex
}
finally
{
oSQLServer.DisConnect()
}
}
else
{
MessageBoxEx.ShowInformationMessage("数据库连接有问题,无法备份!")
}
}
/// <summary>
/// 数据库恢复
/// </summary>
public void DbRestore()
{
if (checkDB())
{
SQLDMO.Restore oRestore = new SQLDMO.RestoreClass()
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass()
try
{
oSQLServer.LoginSecure = false
oSQLServer.Connect(dbServer, dbUser, dbPassword)
SQLDMO.QueryResults qr = oSQLServer.EnumProcesses(-1)
int iColPIDNum = -1
int iColDbName = -1
for (int i = 1i <= qr.Columnsi++)
{
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
}
//杀死使用strDbName数据库的进程
for (int i = 1i <= qr.Rowsi++)
{
int lPID = qr.GetColumnLong(i, iColPIDNum)
string strDBName = qr.GetColumnString(i, iColDbName)
if (strDBName.ToUpper() == this.dbName.ToUpper())
{
oSQLServer.KillProcess(lPID)
}
}
oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database
oRestore.Database = dbName
oRestore.Files = this.FileName
oRestore.FileNumber = 1
oRestore.ReplaceDatabase = true
oRestore.SQLRestore(oSQLServer)
}
catch (Exception ex)
{
throw ex
}
finally
{
oSQLServer.DisConnect()
}
}
else
{
MessageBoxEx.ShowInformationMessage("数据库连接有问题,无法还原!")
}
}
}
}
要加分哦我可是把整个代码都贴出来了
用着可好用 我正用的
有两个
一个简单的下面是代码
<form name="form1" method="post" action="?action=bf">
备份原数据库路径:
<input name="text1" type="text" id="text1">
<p>备份目标数据库路径:
<input name="text2" type="text" id="text2">
</p>
<p>
<label>
<input type="submit" name="Submit" value="备份">
</label>
</p>
</form>
<%
Function CopyFiles(TempSource,TempEnd)
Dim FSO
Set FSO = Server.CreateObject("Scripting.FileSystemObject")
IF FSO.FileExists(TempEnd) then
Response.Write "目标备份文件 <b>" &TempEnd &"</b>已存在,请先删除!"
Set FSO=Nothing
Exit Function
End IF
IF FSO.FileExists(TempSource) Then
Else
Response.Write "要复制的源数据库文件 <b>"&TempSource&"</b>不存在!"
Set FSO=Nothing
Exit Function
End If
FSO.CopyFile TempSource,TempEnd
Response.Write "已经成功复制文件 <b>"&TempSource&"</b>到 <b>"&TempEnd&"</b>"
Set FSO = Nothing
End Function
if request("action")="bf" then
ff=server.MapPath(request("text1"))
aa=server.MapPath(request("text2"))
call CopyFiles(ff,aa)
end if
%>
**************************************我是分割线************************
还有复杂的
<http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/htmlcharset=gb2312" />
<title>数据库备份系统</title>
<style type="text/css">
<!--
body {
background-color: #F4FFD2
margin-left:5px
margin-top: 15px
margin-right: 5px
margin-bottom: 10px
}
html{
font-size:12px
scrollbar-face-color:#99cc66
scrollbar-arrow-color:#000000
scrollbar-track-color:#F4FFD2
scrollbar-3dlight-color:#FFFFFF
scrollbar-highlight-color:#fcfcfc
scrollbar-shadow-color:#99cc00
scrollbar-darkshadow-color:#99cc66
}
input{background-color:#FFFFFF
border-color:#333333
border:1px
font-style:normal
}
.title {
FONT-SIZE: 18pxCOLOR: #010000FONT-FAMILY: "黑体"
}
A:hover {
COLOR: #f18b01FONT-FAMILY: Verdana, Arial, Helvetica, sans-serifTEXT-DECORATION: none
}
TD {
FONT-SIZE: 9ptCOLOR: #666666WORD-BREAK: break-allLINE-HEIGHT: 170%TEXT-DECORATION: none
}
.白字 {
COLOR: #ffffff
}
.company {
FONT-SIZE: 12pxCOLOR: #2b2b2bLINE-HEIGHT: 22pxFONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
}
.dot {
FONT-SIZE: 12pxCOLOR: #aeaeaeFONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
}
.news {
FONT-SIZE: 12pxCOLOR: #515151FONT-FAMILY: Verdana, Arial, Helvetica, sans-serifTEXT-DECORATION: none
}
.word {
FONT-SIZE: 12pxCOLOR: #6f6f6fLINE-HEIGHT: 18pxFONT-FAMILY: Verdana, Arial, Helvetica, sans-serifTEXT-DECORATION: none
}
.caption_dark {
FONT-WEIGHT: boldFONT-SIZE: 12pxCOLOR: #000000FONT-FAMILY: Verdana, Arial, Helvetica, sans-serifTEXT-DECORATION: none
}
.caption_simple {
FONT-WEIGHT: boldFONT-SIZE: 12pxCOLOR: #ffffffFONT-FAMILY: Verdana, Arial, Helvetica, sans-serifTEXT-DECORATION: none
}
.button {
FONT-SIZE: 12pxCOLOR: #666666TEXT-DECORATION: none
}
.date {
FONT-SIZE: 10pxCOLOR: #acacacFONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
}
.doman {
FONT-WEIGHT: normalFONT-SIZE: 12pxCOLOR: #0a52afFONT-FAMILY: Arial, Helvetica, sans-serifTEXT-DECORATION: none
}
.form {
BORDER-RIGHT: #e0e0e0 1px solidBORDER-TOP: #e0e0e0 1px solidFONT-SIZE: 12pxBORDER-LEFT: #e0e0e0 1px solidCOLOR: #333333BORDER-BOTTOM: #e0e0e0 1px solidFONT-FAMILY: Verdana, Arial, Helvetica, sans-serifBACKGROUND-COLOR: #f7f7f7
}
.web_button {
FONT-WEIGHT: boldFONT-SIZE: 12pxCOLOR: #616e43TEXT-DECORATION: none
}
.bbs_user {
FONT-WEIGHT: boldFONT-SIZE: 12pxCOLOR: #ff6600FONT-FAMILY: Verdana, Arial, Helvetica, sans-serifTEXT-DECORATION: none
}
.bbs_user_simple {
FONT-SIZE: 12pxCOLOR: #575757FONT-FAMILY: Verdana, Arial, Helvetica, sans-serifTEXT-DECORATION: none
}
.menu {
FONT-SIZE: 12pxCOLOR: #e4e4e4TEXT-DECORATION: none
}
.copright {
FONT-SIZE: 12pxCOLOR: #333333FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
}
.bt_word {
FONT-SIZE: 12pxCOLOR: #333333LINE-HEIGHT: 18pxFONT-FAMILY: Verdana, Arial, Helvetica, sans-serifTEXT-DECORATION: none
}
.list {
FONT-SIZE: 12pxCOLOR: #424242FONT-FAMILY: "??"TEXT-DECORATION: none
}
.list_class {
FONT-SIZE: 12pxCOLOR: #808080FONT-FAMILY: "???"TEXT-DECORATION: none
}
.page {
FONT-SIZE: 12pxCOLOR:#000000TEXT-DECORATION: none
}
.bbs_bt {
FONT-WEIGHT: boldFONT-SIZE: 12pxCOLOR: #000000TEXT-DECORATION: none
}
.bbs_bt_simple {
FONT-WEIGHT: normalFONT-SIZE: 12pxCOLOR: #545454TEXT-DECORATION: none
}
.bbs_list_word {
FONT-SIZE: 12pxCOLOR: #171717FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
}
.case {
FONT-SIZE: 12pxCOLOR: #5a5e61LINE-HEIGHT: 18pxFONT-FAMILY: Verdana, Arial, Helvetica, sans-serifTEXT-DECORATION: none
}
.date_simple {
FONT-SIZE: 10pxCOLOR: #666666FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
}
.product_bt {
FONT-WEIGHT: boldFONT-SIZE: 12pxCOLOR: #333333LINE-HEIGHT: 16pxFONT-FAMILY: Verdana, Arial, Helvetica, sans-serifTEXT-DECORATION: none
}
.prodcut {
FONT-SIZE: 12pxCOLOR: #505050LINE-HEIGHT: 16pxFONT-FAMILY: Verdana, Arial, Helvetica, sans-serifTEXT-DECORATION: none
}
.form2 {
BORDER-RIGHT: #989898 1px solidBORDER-TOP: #989898 1px solidFONT-SIZE: 12pxBORDER-LEFT: #989898 1px solidCOLOR: #333333BORDER-BOTTOM: #989898 1px solidFONT-FAMILY: Verdana, Arial, Helvetica, sans-serifBACKGROUND-COLOR: #f6f6f6
}
.button3 {
FONT-SIZE: 12pxCOLOR: #7b7b7bFONT-FAMILY: Verdana, Arial, Helvetica, sans-serifTEXT-DECORATION: none
}
.bt1 {
FONT-WEIGHT: boldFONT-SIZE: 12pxCOLOR: #717171
}
.bt_line {
FONT-SIZE: 14pxCOLOR: #547db2FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
}
.bt2 {
FONT-WEIGHT: boldFONT-SIZE: 12pxCOLOR: #ff9501FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif
}
A.nav:link {
FONT-SIZE: 12pxCOLOR: #ffffffTEXT-DECORATION: none
}
A.nav:visited {
FONT-SIZE: 12pxCOLOR: #ffffffTEXT-DECORATION: none
}
A.nav:hover {
FONT-SIZE: 12pxCOLOR: #ffff00TEXT-DECORATION: none
}
<font face="Verdana, Arial, Helvetica, sans-serif">
.sb{color:#000000font-size:13pxtext-decoration:none}
a.sb:visited{color:#6699FFfont-size:13}
a.sb:link{color:#3399CCfont-size:13px}
.tomg { color: #666666font-size:12pxtext-decoration:none}
a.tomg:link {color: #666666text-decoration:none}
a.tomg:visited {color: #666666text-decoration:none}
a.tomg:hover { color:#FF3300font-size:14pxtext-decoration:none}
.00 { color:#333333font-size:12pxtext-decoration:none}
a.00:hover { color: #FF6666text-decoration:underline}
a.00:link {color: #666666text-decoration:none}
a.00:visited {color: #000000text-decoration:none}
a.bb:link {color:#666666text-decoration:nonecursor:handfont-weight:bold}
a.bb:visited {color: #666666text-decoration:nonecursor:handfont-weight:bold}
a.bb:hover {color: #CC0000text-decoration:underlinecursor:handfont-weight:bold}
.cc{color:#FFFFFFfont-size:12pxtext-decoration:none}
.tomg1 { color: #000000font-size:12pxletter-spacing:1.5word-spacing:1line-height:2text-decoration:none}
a.tomg1:link {color: #000000text-decoration:none}
a.tomg1:visited {color: #000000text-decoration:none}
a.tomg1:hover { color:#99CC33 text-decoration:none}
.style1 {color: #000000}
.style2 {
color: #FF0000
font-weight: bold
}
-->
</style></head>
<body>
<table width="98%" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#99CC00">
<form name="form1" id="form1" method="post" action="?action=bf">
<tr>
<td height="71" bgcolor="#FFFFFF"><table width="100%" height="100%" border="0" cellpadding="0" cellspacing="1">
<tr>
<td height="29" colspan="2" align="center" background="afterimage/line2.jpg" class="product_bt">::数据库备份::</td>
</tr>
<tr>
<td height="25" colspan="2" background="afterimage/titleline.gif"> </td>
</tr>
<tr>
<td width="18%" height="25" align="center" bgcolor="#F9F9F9"><span class="style1">数据路径:
</span></td>
<td width="82%" bgcolor="#F9F9F9"><input name="text1" type="text" id="text1" size="50" /> </td>
</tr>
<tr>
<td height="25" align="center" bgcolor="#EEEEEE"><span class="style1"> 备份数据库路径:</span></td>
<td height="25" bgcolor="#EEEEEE"><input name="text2" type="text" id="text2" size="50" />
<input type="submit" name="Submit" value=" 备份数据库 " /></td>
</tr>
<tr>
<td height="25" colspan="2" align="center" bgcolor="#F3F3F3"><%
Function CopyFiles(TempSource,TempEnd)
Dim FSO
Set FSO = Server.CreateObject("Scripting.FileSystemObject")
IF FSO.FileExists(TempEnd) then
Response.Write "目标备份文件 <b>" &TempEnd &"</b>已存在,请先删除!"
Set FSO=Nothing
Exit Function
End IF
IF FSO.FileExists(TempSource) Then
Else
Response.Write "要复制的源数据库文件 <b>"&TempSource&"</b>不存在!"
Set FSO=Nothing
Exit Function
End If
FSO.CopyFile TempSource,TempEnd
Response.Write "已经成功复制文件 <b>"&TempSource&"</b>到 <b>"&TempEnd&"</b>"
Set FSO = Nothing
End Function
if request("action")="bf" then
ff=server.MapPath(request("text1"))
aa=server.MapPath(request("text2"))
ss=split(request("text2"),"/")
CreateFolder(ss(0))
call CopyFiles(ff,aa)
end if
Sub CreateFolder(strFolder)
'首选判断要建立的文件夹是否已经存在
strTestFolder = Server.Mappath(strFolder)
Set objFSO = CreateObject("Scripting.FileSystemObject")
' 检查文件夹是否存在
If objFSO.FolderExists(strTestFolder) Then
response.write "该文件夹已经存在!"
Else
Dim strTestFolder, objFSO
strTestFolder = Server.Mappath(strFolder)
Set objFSO = CreateObject("Scripting.FileSystemObject")
' 建立文件夹
objFSO.CreateFolder(strTestFolder)
Set objFSO = Nothing
End If
End Sub
%></td>
</tr>
</table></td>
</tr></form>
</table>
</body>
</html>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)