C#备份及还原数据库的实现
2013-06-28 16:38
302 查看
使用前要导入SQLDMO.dll
下载地址:http://down.51cto.com/data/853937
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);
}
下载地址:http://down.51cto.com/data/853937
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#实现
- 【C#】数据库备份及还原的实现代码【转载】
- C#实现数据库的备份和还原
- C#备份及还原数据库的实现代码(粗略) // 利用C#还原数据库(SQL SERVER)备份文件到指定路径
- [整理] C#调用SQLDMO.DLL时间数据库备份 / 还原。 (香神无涯) // C#实现SQLSERVER2000数据库备份还原的两种方法 (带进度条)
- C#实现数据库的备份与还原
- 数据库备份与还原c#.net实现
- c# winform 实现对postgresql数据库的自动备份还原功能
- C#实现数据库的备份与还原
- C# 数据库备份及还原
- C#实现的SQL备份与还原功能示例
- 利用T-SQL语句,实现数据库的备份与还原的功能
- (精)如何利用T_SQL实现数据库备份与还原处理之一--(如何利用sql语句,得到数据库文件目录)
- 【原创】ASP.NET C# 对SQL/ACCESS 数据库的备份和还原函数
- 利用T-SQL语句,实现数据库的备份与还原的功能
- 利用T-SQL语句,实现数据库的备份与还原的功能
- [整理] C#调用SQLDMO.DLL时间数据库备份 / 还原。
- (精)如何利用T_SQL实现数据库备份与还原处理之一--(如何利用sql语句,正确备份数据库)
- C#备份还原数据库