/// <summary> /// 删除备份数据库 /// </summary> /// <returns></returns> public bool DBDelete() { bool falg = true; try { if (!Open()) { return(false); } foreach (Database db in svr.Databases) { if (db.Name != null && db.Name.ToLowerInvariant() == dbBackUpName) { #region 关闭sql连接 // 获取所有的进程列表 SQLDMO.QueryResults qr = svr.EnumProcesses(-1); // 查找 SPID 和 DBName 的位置 int iColPIDNum = -1; // 标记 SPID 的位置 int iColDbName = -1; // 标记 DBName 的位置 for (int i = 1; i <= qr.Columns; i++) { string strName = qr.get_ColumnName(i); if (strName.ToUpper().Trim() == "SPID") { // 标记 SPID iColPIDNum = i; } else if (strName.ToUpper().Trim() == "DBNAME") { // 标记 DBName iColDbName = i; } // 如果找到 SPID 和 DBName, 则跳出循环 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() == dbBackUpName.ToUpper()) { svr.KillProcess(lPID); } } #endregion // 删除备数据库 svr.KillDatabase(dbBackUpName); break; } } } catch (System.Runtime.InteropServices.COMException ce) { if (ce.ErrorCode == -2147217803) { // 分离错误 正在使用无法删除 ErrorMessage(202, ce.StackTrace, "[DBManage:DBDelete]", ce.Message); } falg = false; } //finally //{ // LinkNull(svr); //} return(falg); }
public bool RestoreDB(string string_3, string string_4, string string_5, ProgressBar progressBar_1) { int i; bool flag; this.progressBar_0 = progressBar_1; string columnString = ""; string str = ""; string str1 = ""; string str2 = ""; SQLServer sQLServerClass = new SQLServer(); try { try { sQLServerClass.Connect(this.ServerName, this.UserName, this.Password); QueryResults queryResult = sQLServerClass.EnumProcesses(-1); int num = -1; int num1 = -1; for (i = 1; i <= queryResult.Columns; i++) { string columnName = queryResult.ColumnName[i]; if (columnName.ToUpper().Trim() == "SPID") { num = i; } else if (columnName.ToUpper().Trim() == "DBNAME") { num1 = i; } if ((num == -1 ? false : num1 != -1)) { break; } } for (i = 1; i <= queryResult.Rows; i++) { int columnLong = queryResult.GetColumnLong(i, num); if (queryResult.GetColumnString(i, num1).ToUpper() == string_3.ToUpper()) { sQLServerClass.KillProcess(columnLong); } } Restore restoreClass = new Restore() { Action = SQLDMO_RESTORE_TYPE.SQLDMORestore_Database }; restoreClass.PercentComplete += new RestoreSink_PercentCompleteEventHandler(this.Step); restoreClass.Files = string_4; restoreClass.Database = string_3; restoreClass.RelocateFiles = "[SuperOA],[D:\\aaaa.mdf]"; columnString = restoreClass.ReadFileList(sQLServerClass).GetColumnString(1, 1); str = restoreClass.ReadFileList(sQLServerClass).GetColumnString(2, 1); str1 = string.Concat(string_5, columnString, ".mdf"); str2 = string.Concat(string_5, str, ".ldf"); string[] strArrays = new string[] { "[", columnString, "],[", str1, "],[", str, "],[", str2, "]" }; restoreClass.RelocateFiles = string.Concat(strArrays); restoreClass.ReplaceDatabase = true; restoreClass.SQLRestore(sQLServerClass); flag = true; } catch (Exception exception) { exception.Message.ToString(); MessageBox.Show("恢复数据库失败,请关闭所有和该数据库连接的程序!"); flag = false; } } finally { sQLServerClass.DisConnect(); } return(flag); }