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
}
}