C#备份及还原数据库的实现代码(粗略) // 利用C#还原数据库(SQL SERVER)备份文件到指定路径
2013-09-25 23:05
1076 查看
C#数据库备份及还原
1.在用户的配置时,我们需要列出当前局域网内所有的数据库服务器,并且要列出指定服务器的所有数据库,实现代码如下:
取得数据库服务器列表:
publicArrayListGetServerList()
{
ArrayListalServers=newArrayList();
SQLDMO.ApplicationsqlApp=newSQLDMO.ApplicationClass();
try
{
SQLDMO.NameListserverList=sqlApp.ListAvailableSQLServers();
for(inti=1;i<=serverList.Count;i++)
{
alServers.Add(serverList.Item(i));
}
}
catch(Exceptione)
{
throw(newException("取数据库服务器列表出错:"+e.Message));
}
finally
{
sqlApp.Quit();
}
returnalServers;
}
publicArrayListGetDbList(stringstrServerName,stringstrUserName,stringstrPwd)
{
ServerName=strServerName;
UserName=strUserName;
Password=strPwd;
ArrayListalDbs=newArrayList();
SQLDMO.ApplicationsqlApp=newSQLDMO.ApplicationClass();
SQLDMO.SQLServersvr=newSQLDMO.SQLServerClass();
try
{
svr.Connect(ServerName,UserName,Password);
foreach(SQLDMO.Databasedbinsvr.Databases)
{
if(db.Name!=null)
alDbs.Add(db.Name);
}
}
catch(Exceptione)
{
throw(newException("连接数据库出错:"+e.Message));
}
finally
{
svr.DisConnect();
sqlApp.Quit();
}
returnalDbs;
}
2.数据库的备份和实时进度显示代码:
publicboolBackUPDB(stringstrDbName,stringstrFileName,ProgressBarpgbMain)
{
PBar=pgbMain;
SQLDMO.SQLServersvr=newSQLDMO.SQLServerClass();
try
{
svr.Connect(ServerName,UserName,Password);
SQLDMO.Backupbak=newSQLDMO.BackupClass();
bak.Action=0;
bak.Initialize=true;
SQLDMO.BackupSink_PercentCompleteEventHandlerpceh=
newSQLDMO.BackupSink_PercentCompleteEventHandler(Step);
bak.PercentComplete+=pceh;
bak.Files=strFileName;
bak.Database=strDbName;
bak.SQLBackup(svr);
returntrue;
}
catch(Exceptionerr)
{
throw(newException("备份数据库失败"+err.Message));
}
finally
{
svr.DisConnect();
}
}
privatevoidStep(stringmessage,intpercent)
{
PBar.Value=percent;
}
其中,这两个语句实现了进度的实时显示:
SQLDMO.BackupSink_PercentCompleteEventHandlerpceh=newSQLDMO.BackupSink_PercentCompleteEventHandler(Step);
bak.PercentComplete+=pceh;
Step就是上面privatevoidStep(stringmessage,intpercent)的方法名称,它用来显示进度条的当前进度。
3.数据库的恢复和杀死进程的代码:
publicboolRestoreDB(stringstrDbName,stringstrFileName,ProgressBarpgbMain)
{
PBar=pgbMain;
SQLDMO.SQLServersvr=newSQLDMO.SQLServerClass();
try
{
svr.Connect(ServerName,UserName,Password);
SQLDMO.QueryResultsqr=svr.EnumProcesses(-1);
intiColPIDNum=-1;
intiColDbName=-1;
for(inti=1;i<=qr.Columns;i++)
{
stringstrName=qr.get_ColumnName(i);
if(strName.ToUpper().Trim()=="SPID")
{
iColPIDNum=i;
}
elseif(strName.ToUpper().Trim()=="DBNAME")
{
iColDbName=i;
}
if(iColPIDNum!=-1&&iColDbName!=-1)
break;
}
for(inti=1;i<=qr.Rows;i++)
{
intlPID=qr.GetColumnLong(i,iColPIDNum);
stringstrDBName=qr.GetColumnString(i,iColDbName);
if(strDBName.ToUpper()==strDbName.ToUpper())
svr.KillProcess(lPID);
}
SQLDMO.Restoreres=newSQLDMO.RestoreClass();
res.Action=0;
SQLDMO.RestoreSink_PercentCompleteEventHandlerpceh=
newSQLDMO.RestoreSink_PercentCompleteEventHandler(Step);
res.PercentComplete+=pceh;
res.Files=strFileName;
res.Database=strDbName;
res.ReplaceDatabase=true;
res.SQLRestore(svr);
returntrue;
}
catch(Exceptionerr)
{
throw(newException("恢复数据库失败,请关闭所有和该数据库连接的程序!"+err.Message));
}
finally
{
svr.DisConnect();
}
}
其中这个语句取得了所有的进程列表:
SQLDMO.QueryResultsqr=svr.EnumProcesses(-1);
下面的语句找到和要恢复数据库相关的进程并杀死:
intiColPIDNum=-1;
intiColDbName=-1;
for(inti=1;i<=qr.Columns;i++)
{
stringstrName=qr.get_ColumnName(i);
if(strName.ToUpper().Trim()=="SPID")
{
iColPIDNum=i;
}
elseif(strName.ToUpper().Trim()=="DBNAME")
{
iColDbName=i;
}
if(iColPIDNum!=-1&&iColDbName!=-1)
break;
}
for(inti=1;i<=qr.Rows;i++)
{
intlPID=qr.GetColumnLong(i,iColPIDNum);
stringstrDBName=qr.GetColumnString(i,iColDbName);
if(strDBName.ToUpper()==strDbName.ToUpper())
svr.KillProcess(lPID);
}
C#数据库备份及还原就介绍到这里,希望对你有所帮助。
/////////////////////////////////////////////////////
利用C#还原数据库(SQLSERVER)备份文件到指定路径
benben|查看:1938|评论:0
摘要: 最近在做一个数据采集模块,遇到这样一个场景,就是需要将数据库备份文件还原到指定数据库实例下再采集数据。本机测试都没有问题,可一拿到真实环境中测试却发现了一个很大的Bug。所有的数据库都还原不上,很纠...
1.在用户的配置时,我们需要列出当前局域网内所有的数据库服务器,并且要列出指定服务器的所有数据库,实现代码如下:
取得数据库服务器列表:
publicArrayListGetServerList()
{
ArrayListalServers=newArrayList();
SQLDMO.ApplicationsqlApp=newSQLDMO.ApplicationClass();
try
{
SQLDMO.NameListserverList=sqlApp.ListAvailableSQLServers();
for(inti=1;i<=serverList.Count;i++)
{
alServers.Add(serverList.Item(i));
}
}
catch(Exceptione)
{
throw(newException("取数据库服务器列表出错:"+e.Message));
}
finally
{
sqlApp.Quit();
}
returnalServers;
}
取得指定数据库服务器的数据库列表
publicArrayListGetDbList(stringstrServerName,stringstrUserName,stringstrPwd)
{
ServerName=strServerName;
UserName=strUserName;
Password=strPwd;
ArrayListalDbs=newArrayList();
SQLDMO.ApplicationsqlApp=newSQLDMO.ApplicationClass();
SQLDMO.SQLServersvr=newSQLDMO.SQLServerClass();
try
{
svr.Connect(ServerName,UserName,Password);
foreach(SQLDMO.Databasedbinsvr.Databases)
{
if(db.Name!=null)
alDbs.Add(db.Name);
}
}
catch(Exceptione)
{
throw(newException("连接数据库出错:"+e.Message));
}
finally
{
svr.DisConnect();
sqlApp.Quit();
}
returnalDbs;
}
2.数据库的备份和实时进度显示代码:
publicboolBackUPDB(stringstrDbName,stringstrFileName,ProgressBarpgbMain)
{
PBar=pgbMain;
SQLDMO.SQLServersvr=newSQLDMO.SQLServerClass();
try
{
svr.Connect(ServerName,UserName,Password);
SQLDMO.Backupbak=newSQLDMO.BackupClass();
bak.Action=0;
bak.Initialize=true;
SQLDMO.BackupSink_PercentCompleteEventHandlerpceh=
newSQLDMO.BackupSink_PercentCompleteEventHandler(Step);
bak.PercentComplete+=pceh;
bak.Files=strFileName;
bak.Database=strDbName;
bak.SQLBackup(svr);
returntrue;
}
catch(Exceptionerr)
{
throw(newException("备份数据库失败"+err.Message));
}
finally
{
svr.DisConnect();
}
}
privatevoidStep(stringmessage,intpercent)
{
PBar.Value=percent;
}
其中,这两个语句实现了进度的实时显示:
SQLDMO.BackupSink_PercentCompleteEventHandlerpceh=newSQLDMO.BackupSink_PercentCompleteEventHandler(Step);
bak.PercentComplete+=pceh;
Step就是上面privatevoidStep(stringmessage,intpercent)的方法名称,它用来显示进度条的当前进度。
3.数据库的恢复和杀死进程的代码:
publicboolRestoreDB(stringstrDbName,stringstrFileName,ProgressBarpgbMain)
{
PBar=pgbMain;
SQLDMO.SQLServersvr=newSQLDMO.SQLServerClass();
try
{
svr.Connect(ServerName,UserName,Password);
SQLDMO.QueryResultsqr=svr.EnumProcesses(-1);
intiColPIDNum=-1;
intiColDbName=-1;
for(inti=1;i<=qr.Columns;i++)
{
stringstrName=qr.get_ColumnName(i);
if(strName.ToUpper().Trim()=="SPID")
{
iColPIDNum=i;
}
elseif(strName.ToUpper().Trim()=="DBNAME")
{
iColDbName=i;
}
if(iColPIDNum!=-1&&iColDbName!=-1)
break;
}
for(inti=1;i<=qr.Rows;i++)
{
intlPID=qr.GetColumnLong(i,iColPIDNum);
stringstrDBName=qr.GetColumnString(i,iColDbName);
if(strDBName.ToUpper()==strDbName.ToUpper())
svr.KillProcess(lPID);
}
SQLDMO.Restoreres=newSQLDMO.RestoreClass();
res.Action=0;
SQLDMO.RestoreSink_PercentCompleteEventHandlerpceh=
newSQLDMO.RestoreSink_PercentCompleteEventHandler(Step);
res.PercentComplete+=pceh;
res.Files=strFileName;
res.Database=strDbName;
res.ReplaceDatabase=true;
res.SQLRestore(svr);
returntrue;
}
catch(Exceptionerr)
{
throw(newException("恢复数据库失败,请关闭所有和该数据库连接的程序!"+err.Message));
}
finally
{
svr.DisConnect();
}
}
其中这个语句取得了所有的进程列表:
SQLDMO.QueryResultsqr=svr.EnumProcesses(-1);
下面的语句找到和要恢复数据库相关的进程并杀死:
intiColPIDNum=-1;
intiColDbName=-1;
for(inti=1;i<=qr.Columns;i++)
{
stringstrName=qr.get_ColumnName(i);
if(strName.ToUpper().Trim()=="SPID")
{
iColPIDNum=i;
}
elseif(strName.ToUpper().Trim()=="DBNAME")
{
iColDbName=i;
}
if(iColPIDNum!=-1&&iColDbName!=-1)
break;
}
for(inti=1;i<=qr.Rows;i++)
{
intlPID=qr.GetColumnLong(i,iColPIDNum);
stringstrDBName=qr.GetColumnString(i,iColDbName);
if(strDBName.ToUpper()==strDbName.ToUpper())
svr.KillProcess(lPID);
}
C#数据库备份及还原就介绍到这里,希望对你有所帮助。
/////////////////////////////////////////////////////
利用C#还原数据库(SQLSERVER)备份文件到指定路径
利用C#还原数据库(SQLSERVER)备份文件到指定路径
2012-2-1908:58|发布者:摘要: 最近在做一个数据采集模块,遇到这样一个场景,就是需要将数据库备份文件还原到指定数据库实例下再采集数据。本机测试都没有问题,可一拿到真实环境中测试却发现了一个很大的Bug。所有的数据库都还原不上,很纠...
最近在做一个数据采集模块,遇到这样一个场景,就是需要将数据库备份文件还原到指定数据库实例下再采集数据。本机测试都没有问题,可一拿到真实环境中测试却发现了一个很大的Bug。所有的数据库都还原不上,很纠结。因为我本以为SQLSERVER会还原到默认路径下,其实不然。 当我拿到真实数据库备份文件时,我首先在数据库中运行restoredatabaseRestoreDbNamefromdisk='H:\DBFolder\Db_Back',执行结果如下: ViewCode ///<summary> ///<summary> |
相关文章推荐
- 利用C#还原数据库(SQL SERVER)备份文件到指定路径
- (精)如何利用T_SQL实现数据库备份与还原处理之一--(如何利用sql语句,得到数据库文件目录)
- 【C#】数据库备份及还原的实现代码【转载】
- SQL Server 备份数据库到指定路径,任务实现
- 利用T-SQL语句,实现数据库的备份与还原的功能
- Sql server 2000数据库备份文件还原到sql server 2005
- C#将数据库的元组导出生产txt文件,代码实现
- SQL Server 2005/2008 用户数据库文件默认路径和默认备份路径修改方法
- php实现文件上传到指定文件夹,文件路径或名字存入数据库,如何实现啊
- SQL Server 2005/2008 用户数据库文件默认路径和默认备份路径修改方法
- web服务文件更新自动同步、数据库主从复制、shell脚本实现网站代码备份和mysql备份
- 通过T-SQL语句实现数据库备份与还原的代码
- 如何在C#中用程序执行指定的SQL脚本文件,实现自动安装创建数据库
- java代码实现输出指定以.java结尾的文件的绝对路径
- 用c#备份和还原sql server 2000数据库
- (精)如何利用T_SQL实现数据库备份与还原处理之一--(如何利用sql语句,正确还原数据库)
- SQL Server 2005/2008 用户数据库文件默认路径和默认备份路径修改方法
- xml学习(三)---利用xml文件实现数据岛功能(网页显示xml文件中的内容免C#代码操作xml文件)
- (精)如何利用T_SQL实现数据库备份与还原处理之一
- 数据库备份与还原的C#实现