Shadow3627
        /// <summary>
        /// 还原数据库
        /// </summary>
        /// <param name="strDbName">还原后的数据库名称</param>
        /// <param name="strFileName">数据库备份文件</param>
        /// <param name="dbDataName">源数据库文件</param>
        /// <param name="dbLogName">源数据库Log文件</param>
        /// <param name="dbPath">还原后保存的地址</param>
        /// <param name="serverName">服务器地址</param>
        /// <param name="userName">用户名</param>
        /// <param name="password">密码</param>
        /// <returns></returns>
        public static bool RestoreDB(string strDbName, string strFileName,string dbDataName,string dbLogName,string dbPath, string serverName, string userName, string password)
        {

            SQLDMO.SQLServer svr = new SQLDMO.SQLServerClass();
            try
            {
                svr.Connect(serverName, userName, password);
                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);
                }

                SQLDMO.Restore res = new SQLDMO.RestoreClass();
                res.Action = 0;
                res.Files = strFileName;
                res.RelocateFiles = @"[" + dbDataName + "],[" + System.IO.Path.Combine(dbPath, strDbName + "_Data.mdf") + "],[" + dbLogName + "],[" + System.IO.Path.Combine(dbPath, strDbName + "_log.ldf") + "]";
                res.Database = strDbName;
                res.ReplaceDatabase = true;
                res.SQLRestore(svr);
                return true;
            }
            catch (Exception err)
            {
                throw (new Exception("恢复数据库失败,请关闭所有和该数据库连接的程序!" + err.Message));
            }
            finally
            {
                svr.DisConnect();
            }
        }

需要引用COM里的SQLDMO

分类:

技术点:

相关文章:

  • 2021-12-06
  • 2021-12-10
  • 2021-10-28
  • 2021-01-04
  • 2021-12-30
  • 2021-08-28
  • 2021-11-03
  • 2021-11-30
猜你喜欢
  • 2021-09-27
  • 2021-11-29
  • 2021-12-10
  • 2021-06-19
  • 2021-08-30
相关资源
相似解决方案