首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#数据恢复出现的异常

2012-01-06 
C#数据恢复出现的错误代码如下:privatevoid数据恢复ToolStripMenuItem_Click(objectsender,EventArgse){if

C#数据恢复出现的错误
代码如下:
  private   void   数据恢复ToolStripMenuItem_Click(object   sender,   EventArgs   e)
                {
                        if   (openFileDialog1.ShowDialog()   ==   DialogResult.OK)
                        {


                                this.label1.Visible   =   true;
                                this.label1.Refresh();
                                this.progressBar1.Visible   =   true;
                                this.groupBox1.Visible   =   true;
                                this.label1.Text   =   "进行数据库恢复中... ";
                                SQLDMO.SQLServer   svr   =   new   SQLDMO.SQLServerClass();
                                //try
                                //{
                                        svr.Connect( "127.0.0.1 ",   "sa ",   " ");
                                        //杀死所有有关的进程      
                                        SQLDMO.QueryResults   qr   =   svr.EnumProcesses(-1);
                                        int   iColPIDNum   =   -1;
                                        int   iColDbName   =   -1;
                                        for   (int   i   =   1;   i   <=   qr.Columns;   i++)
                                        {
                                                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;
                                        }

                                        for   (int   i   =   1;   i   <=   qr.Rows;   i++)
                                        {
                                                int   lPID   =   qr.GetColumnLong(i,   iColPIDNum);
                                                string   strDBName   =   qr.GetColumnString(i,   iColDbName);
                                                if   (strDBName.ToUpper()   ==   strDBName.ToUpper())   svr.KillProcess(lPID);   \\提示此处发生错误,[Microsoft][ODBC   SQL   Server   Driver][SQL   Server]只能取消用户进程。
                                        }

                                        SQLDMO.Restore   res   =   new   SQLDMO.RestoreClass();
                                        res.Action   =   0;
                                        SQLDMO.RestoreSink_PercentCompleteEventHandler   pceh   =   new   SQLDMO.RestoreSink_PercentCompleteEventHandler(Step);
                                        res.PercentComplete   +=   pceh;
                                        res.Files   =   openFileDialog1.FileName.Trim();
                                        res.Database   =   "test ";
                                        res.ReplaceDatabase   =   true;
                                        res.SQLRestore(svr);
                                        MessageBox.Show( "数据库恢复成功! ",   "系统提示! ",   MessageBoxButtons.OK,   MessageBoxIcon.Warning);


                                //}
                                //catch   (Exception   err)
                                //{
                                //         throw   (new   Exception( "恢复数据库失败,请关闭所有和该数据库连接的程序!\n如果在桌面进行恢复请改变路径!\n\n "   +   err.Message));
                                //}
                                //finally
                                //{
                                        svr.DisConnect();
                                //}
                                this.groupBox1.Visible   =   false;
                                this.label1.Visible   =   false;
                                this.progressBar1.Visible   =   false;
                             
                        }
                }

无法实现数据库恢复...哪为大虾指教下.这个代码是晚上找的,稍做了修改..自己并不是非常理解.


[解决办法]
public string dataRestore(string strDbName, string filepath)//strDbName数据库名称,filepath备份文件路径
{
SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
try
{
oSQLServer.LoginSecure = false;
oSQLServer.Connect( "localhost ", "sa ", " ");
SQLDMO.QueryResults qr = oSQLServer.EnumProcesses(-1);
int iColPIDNum = -1;
int iColDbName = -1;
for (int i = 1; i <= qr.Columns; i++)
{
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;
}

for (int i = 1; i <= qr.Rows; i++)
{
int lPID = qr.GetColumnLong(i, iColPIDNum);
string strDBName = qr.GetColumnString(i, iColDbName);
if (strDBName.ToUpper() == strDbName.ToUpper())
oSQLServer.KillProcess(lPID);
}



oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
oRestore.Database = strDbName;
oRestore.Files = filepath;
oRestore.FileNumber = 1;
oRestore.ReplaceDatabase = true;
oRestore.SQLRestore(oSQLServer);
return "恢复数据库成功 ";
}
catch (Exception ee)
{
System.Web.HttpContext.Current.Response.Write(ee.Message);
return "恢复数据库失败 ";
}
finally
{
oSQLServer.DisConnect();
}

}

这是我用的还原数据库的函数,你试试吧

热点排行