예제 #1
0
        public bool DbRestore(string url)
        {
            bool result;

            if (!this.exepro())
            {
                result = false;
            }
            else
            {
                Restore   oRestore   = new RestoreClass();
                SQLServer oSQLServer = new SQLServerClass();
                try
                {
                    oSQLServer.LoginSecure = false;
                    oSQLServer.Connect(this.server, this.uid, this.pwd);
                    oRestore.Action          = SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
                    oRestore.Database        = this.database;
                    oRestore.Files           = url;
                    oRestore.FileNumber      = 1;
                    oRestore.ReplaceDatabase = true;
                    oRestore.SQLRestore(oSQLServer);
                    result = true;
                }
                catch
                {
                    result = false;
                }
                finally
                {
                    oSQLServer.DisConnect();
                }
            }
            return(result);
        }
예제 #2
0
 /// <summary>
 /// 恢复数据库
 /// </summary>
 /// <param name="dbName"></param>
 /// <param name="bakFile"></param>
 /// <remarks>
 /// 恢复前最好调用KillAllProcess关闭所有连接,否则恢复可能失败。
 /// </remarks>
 /// <example>
 /// <code>
 /// SqlDmoHelper dmo = new SqlDmoHelper("(local)", "sa", "sa");
 /// dmo.RestoreDB("test", @"d:\temp\database\test.bak");
 /// </code>
 /// </example>
 public bool RestoreDB(string dbName, string bakFile)
 {
     try
     {
         Restore oRestore = new RestoreClass();
         oRestore.Action          = SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
         oRestore.Database        = dbName;
         oRestore.Files           = bakFile;
         oRestore.FileNumber      = 1;
         oRestore.ReplaceDatabase = true;
         oRestore.SQLRestore(sqlServer);
         return(true);
     }
     catch
     {
         return(false);
     }
 }
예제 #3
0
		public string RestoreDatabase(string backuppath, string ServerName, string UserName, string Password, string strDbName, string strFileName)
		{
			#region 数据库的恢复的代码

			SQLServer svr = new SQLServerClass();
			try
			{
				svr.Connect(ServerName, UserName, Password);
				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);
				}


				Restore res = new RestoreClass();
				res.Action = 0;
				string path = backuppath + strFileName + ".config";
				res.Files = path;

				res.Database = strDbName;
				res.ReplaceDatabase = true;
				res.SQLRestore(svr);

				return string.Empty;
			}
			catch (Exception err)
			{
				string message = err.Message.Replace("'", " ");
				message = message.Replace("\n", " ");
				message = message.Replace("\\", "/");
                
				return message;
			}
			finally
			{
				svr.DisConnect();
			}

			#endregion
		}
예제 #4
0
        public bool StoreDatabase(string sFile, string sPath, string sDataBase)
        {
            bool      flag         = false;
            SQLServer serverObject = new SQLServerClass();

            SQLDMO.Restore restore = new RestoreClass();
            try
            {
                int num3;
                serverObject.LoginSecure = false;
                serverObject.Connect(this.Server, this.UserID, this.Password);
                QueryResults results = serverObject.EnumProcesses(-1);
                int          column  = -1;
                int          num2    = -1;
                for (num3 = 1; num3 < results.Columns; num3++)
                {
                    string str = results.get_ColumnName(num3);
                    if (str.ToUpper().Trim() == "SPID")
                    {
                        column = num3;
                    }
                    else if (str.ToUpper().Trim() == "DBNAME")
                    {
                        num2 = num3;
                    }
                    if ((column != -1) && (num2 != -1))
                    {
                        break;
                    }
                }
                num3 = 1;
                while (num3 < results.Rows)
                {
                    int columnLong = results.GetColumnLong(num3, column);
                    if (results.GetColumnString(num3, num2).ToUpper() == sDataBase.ToUpper())
                    {
                        serverObject.KillProcess(columnLong);
                    }
                    num3++;
                }
                QueryResults results2 = serverObject.ExecuteWithResults(string.Format("RESTORE FILELISTONLY FROM DISK = '{0}'", sFile), null);
                int          num5     = 0;
                int          num6     = 0;
                for (num3 = 1; num3 < results2.Columns; num3++)
                {
                    if ("LOGICALNAME" == results2.get_ColumnName(num3).ToUpper())
                    {
                        num5 = num3;
                    }
                    if ("PHYSICALNAME" == results2.get_ColumnName(num3).ToUpper())
                    {
                        num6 = num3;
                    }
                    if ((num6 != 0) && (num5 != 0))
                    {
                        break;
                    }
                }
                StringBuilder builder = new StringBuilder();
                for (num3 = 1; num3 <= results2.Rows; num3++)
                {
                    builder.Append(string.Format(@"[{0}],[{1}\{2}]", results2.GetColumnString(num3, num5), sPath, Path.GetFileName(results2.GetColumnString(num3, num6))));
                    if (num3 != results2.Rows)
                    {
                        builder.Append(",");
                    }
                }
                restore.Action          = SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
                restore.Database        = sDataBase;
                restore.Files           = sFile;
                restore.FileNumber      = 1;
                restore.ReplaceDatabase = false;
                restore.RelocateFiles   = builder.ToString();
                restore.SQLRestore(serverObject);
                Databases databases = serverObject.Databases;
                foreach (SQLDMO.Database database in databases)
                {
                    if (database.Name == sDataBase)
                    {
                        return(true);
                    }
                }
                return(flag);
            }
            catch (Exception exception)
            {
                Log.WriteLog(string.Format("还原数据库[{0}]:StoreDatabase(string sFile,string sPath,string sDataBase)", sDataBase), exception.Message);
                return(flag);
            }
            finally
            {
                serverObject.DisConnect();
            }
            return(flag);
        }
예제 #5
0
        private void hsRestore_Click(object sender, EventArgs e)
        {
            n = 0;
            var ca = new ConnectionAttributes();

            ca.Server = DBReg.Server;
            //SE  ca.Client = DRC.Client;
            ca.DatabasePath   = txtRestoreDetinationDatabasePath.Text;
            ca.Password       = DBReg.Password;
            ca.User           = DBReg.User;
            ca.ConnectionType = DBReg.ConnectionType;
            ca.CharSet        = DBReg.CharSet;
            ca.PacketSize     = DBReg.PacketSize;
            ca.Port           = DBReg.Port;

            string connstr = ConnectionStrings.Instance().MakeConnectionString(ca);

            lvRestoreMessage.Items.Clear();
            var bu = new RestoreClass(connstr);

            bu.Restore.ServiceOutput += Restore_ServiceOutput;

            var lf = new List <FirebirdSql.Data.Services.FbBackupFile>();



            for (int i = 0; i < lvRestore.Items.Count; i++)
            {
                ListViewItem lvi = lvRestore.Items[i];
                FirebirdSql.Data.Services.FbBackupFile bf = (FirebirdSql.Data.Services.FbBackupFile)lvi.Tag;

                lf.Add(bf);
            }
            bu.SetFiles(lf.ToArray());

            if (rbReplaceDatabase.Checked)
            {
                bu.AddOptions(FirebirdSql.Data.Services.FbRestoreFlags.Replace);
            }
            else
            {
                bu.AddOptions(FirebirdSql.Data.Services.FbRestoreFlags.Create);
            }
            if (cbRestoreNoIndices.Checked)
            {
                bu.AddOptions(FirebirdSql.Data.Services.FbRestoreFlags.DeactivateIndexes);
            }
            if (cbRestoreNoShadows.Checked)
            {
                bu.AddOptions(FirebirdSql.Data.Services.FbRestoreFlags.NoShadow);
            }
            if (cbRestoreInvidualCommit.Checked)
            {
                bu.AddOptions(FirebirdSql.Data.Services.FbRestoreFlags.IndividualCommit);
            }
            if (cbRestoreMetatdataOnly.Checked)
            {
                bu.AddOptions(FirebirdSql.Data.Services.FbRestoreFlags.MetaDataOnly);
            }
            if (cbRestoreNoVaildy.Checked)
            {
                bu.AddOptions(FirebirdSql.Data.Services.FbRestoreFlags.NoValidity);
            }
            if (cbRestoreUseAllSpace.Checked)
            {
                bu.AddOptions(FirebirdSql.Data.Services.FbRestoreFlags.UseAllSpace);
            }
            ConnectionPoolClass.Instance().CloseAllConnections();
            if (ConnectionPoolClass.Instance().AktCON != null)
            {
                ConnectionPoolClass.Instance().AktCON.Close();
            }
            bu.Execute();
            DbExplorerForm.Instance().MakeDatabaseTree(true);
        }