Asp.net备份还原SQLServer数据库及压缩Access数据库

asp.net备份还原sqlserver及压缩access数据库

/**********************************************************************************

*

* 功能说明:备份和恢复sql server数据库

* 作者: 刘功勋;

* 版本:v0.1(c#2.0);时间:2007-1-1

* 当使用sql server时,请引用 com中的,sqldmo.dll组件

* 当使用access中,请浏览添加引用以下两个dll

* 引用c:\program files\common files\system\ado\msadox.dll,该dll包含adox命名空间

* 引用c:\program files\common files\system\ado\msjro.dll,该dll包含jro命名空间

* *******************************************************************************/

using system;

using system.data;

using system.configuration;

using system.web;

using system.web.security;

using system.web.ui;

using system.web.ui.webcontrols;

using system.web.ui.webcontrols.webparts;

using system.web.ui.htmlcontrols;

using system.io;

using adox;//该命名空间包含创建access的类(方法)–解决方案 ==> 引用 ==> 添加引用 ==> 游览找到.dll

using jro;//该命名空间包含压缩access的类(方法)

namespace ec

{

///

/// 数据库恢复和备份

///

public class sqlbackobject

{

public sqlbackobject()

{

//

// todo: 在此处添加构造函数逻辑

//

}

#region sql数据库备份

///

/// sql数据库备份

///

///sql服务器ip或(localhost)

///数据库登录名

///数据库登录密码

///数据库名

///备份到的路径

public static void sqlback(string serverip,string loginname,string loginpass,string dbname,string backpath)

{

sqldmo.backup obackup = new sqldmo.backupclass();

sqldmo.sqlserver osqlserver = new sqldmo.sqlserverclass();

try

{

osqlserver.loginsecure = false;

osqlserver.connect(serverip, loginname, loginpass);

obackup.database = dbname;

obackup.files = backpath;

obackup.backupsetname = dbname;

obackup.backupsetdescription = “数据库备份”;

obackup.initialize = true;

obackup.sqlbackup(osqlserver);

}

catch (exception e)

{

throw new exception(e.tostring());

}

finally

{

osqlserver.disconnect();

}

}

#endregion

#region sql恢复数据库

///

/// sql恢复数据库

///

///sql服务器ip或(localhost)

///数据库登录名

///数据库登录密码

///要还原的数据库名

///数据库备份的路径

public static void sqldbrestore(string serverip,string loginname,string loginpass,string dbname,string backpath)

{

sqldmo.restore orestore = new sqldmo.restoreclass();

sqldmo.sqlserver osqlserver = new sqldmo.sqlserverclass();

try

{

osqlserver.loginsecure = false;

osqlserver.connect(serverip, loginname, loginpass);

orestore.action = sqldmo.sqldmo_restore_type.sqldmorestore_database;

orestore.database = dbname;

orestore.files = backpath;

orestore.filenumber = 1;

orestore.replacedatabase = true;

orestore.sqlrestore(osqlserver);

}

catch (exception e)

{

throw new exception(e.tostring());

}

finally

{

osqlserver.disconnect();

}

}

#endregion

#region 根据指定的文件名称创建access数据库

///

/// 根据指定的文件名称创建数据

///

///绝对路径+文件名称

public static void createaccess(string dbpath)

{

if (file.exists(dbpath))//检查数据库是否已存在

{

throw new exception(“目标数据库已存在,无法创建”);

}

dbpath = “provider=microsoft.jet.oledb.4.0;data source=”+dbpath;

//创建一个catalogclass对象实例

adox.catalogclass cat = new adox.catalogclass();

//使用catalogclass对象的create方法创建access数据库

cat.create(dbpath);

}

#endregion

#region 压缩access数据库

///

/// 压缩access数据库

///

///数据库绝对路径

public static void compactaccess(string dbpath)

{

if (!file.exists(dbpath))

{

throw new exception(“目标数据库不存在,无法压缩”);

}

//声明临时数据库名称

string temp = datetime.now.year.tostring();

temp += datetime.now.month.tostring();

temp += datetime.now.day.tostring();

temp += datetime.now.hour.tostring();

temp += datetime.now.minute.tostring();

temp += datetime.now.second.tostring() + “.bak”;

temp = dbpath.substring(0, dbpath.lastindexof(“\\”) + 1) + temp;

//定义临时数据库的连接字符串

string temp2 = “provider=microsoft.jet.oledb.4.0;data source=”+temp;

//定义目标数据库的连接字符串

string dbpath2 = “provider=microsoft.jet.oledb.4.0;data source=”+dbpath;

//创建一个jetengineclass对象的实例

jro.jetengineclass jt = new jro.jetengineclass();

//使用jetengineclass对象的compactdatabase方法压缩修复数据库

jt.compactdatabase(dbpath2, temp2);

//拷贝临时数据库到目标数据库(覆盖)

file.copy(temp, dbpath, true);

//最后删除临时数据库

file.delete(temp);

}

#endregion

#region 备份access数据库

///

/// 备份access数据库

///

///要备份的数据库绝对路径

///备份到的数据库绝对路径

///

public static void backup(string srcpath,string aimpath)

{

if (!file.exists(srcpath))

{

throw new exception(“源数据库不存在,无法备份”);

}

try

{

file.copy(srcpath,aimpath,true);

}

catch(ioexception ixp)

{

throw new exception(ixp.tostring());

}

}

#endregion

#region 还原access数据库

///

/// 还原access数据库

///

///备份的数据库绝对路径

///要还原的数据库绝对路径

public static void recoveraccess(string bakpath,string dbpath)

{

if (!file.exists(bakpath))

{

throw new exception(“备份数据库不存在,无法还原”);

}

try

{

file.copy(bakpath, dbpath, true);

}

catch (ioexception ixp)

{

throw new exception(ixp.tostring());

}

}

#endregion

}

}

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐