Als ich das letzte Mal an einem Projekt gearbeitet habe, bei dem es um die Wiederherstellung und Wiederherstellung von Datenbanken ging, habe ich festgestellt, dass es mit SQLDMO implementiert wurde. Sie müssen lediglich eine SQLDMO-Referenz hinzufügen und dann die Methoden der folgenden Klassen verwenden, um dies zu erreichen.
Ich habe die Klasse des ursprünglichen Autors erweitert, sodass sie die Datenbankverbindungszeichenfolge in web.config automatisch erkennen und die wiederhergestellten Informationen über Variableneinstellungen wiederherstellen kann.
Beim Wiederherstellen müssen Sie aufpassen. Das größte Problem besteht darin, dass andere Benutzer die Datenbank nicht wiederherstellen können.
proc killspid erstellen (@dbname varchar(20))
als
beginnen
deklariere @sql nvarchar(500)
deklariere @spid int
set @sql='getspid-Cursor deklarieren für
Wählen Sie Spid aus Systemprozessen aus, wobei dbid=db_id( '''+@dbname+''')'
exec(@sql)
öffne getpid
Als nächstes von getspid nach @spid abrufen
while @@fetch_status<>-1
beginnen
exec('kill '+@spid )
Als nächstes von getspid nach @spid abrufen
Ende
getpid schließen
delocategetpid
Ende
GEHEN
Um diese gespeicherte Prozedur vor der Wiederherstellung auszuführen, müssen Sie dbname übergeben, also den Namen Ihrer Datenbank. Das Folgende ist der Originalcode der Klasse: (Die Datenbankverbindungszeichenfolge in web.config ist constr)
using System;
using System.Data.SqlClient
;
using System.Data;
namespace web.base_class
{
/// <summary>
/// DbOper-Klasse, verwendet hauptsächlich SQLDMO, um die Sicherung und Wiederherstellung von Microsoft SQL Server zu realisieren Datenbank
/// </summary>
public class DbOper
{
private string
uid;
private string
data
;
/// <summary>
/// Konstruktor der DbOper-Klasse
/// </ Zusammenfassung>
public DbOper()
{
conn=System.Configuration.ConfigurationSettings.AppSettings["constr"].ToString();
server=cut
(conn,"server=",";");
=“, „;“);
pwd=cut(conn, „pwd=“, „;“);
Database=cut(conn, „database=“, „;“);
}
public string cut(string str,string bg ,string ed)
{
string sub;
sub=str.Substring(str.IndexOf
(
bg
)+bg.Length);
/// <summary>
/// Datenbanksicherung
/// </summary>
public bool DbBackup(string url)
{
SQLDMO.Backup oBackup = new SQLDMO.BackupClass()
;
try
{
oSQLServer.LoginSecure = false;
oSQLServer.Connect(server,uid, pwd);
oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
oBackup.Files
= url;//"d:Northwind.bak ";
oBackup.BackupSetName = Datenbank;
oBackup.BackupSetDescription = "Datenbanksicherung";
oBackup.Initialize = true;
oBackup.SQLBackup(oSQLServer);
return true;
}
Catch
{
return false;
throw;
}
Finally
{
oSQLServer.DisConnect();
}
}
/// <summary>
/// Datenbankwiederherstellung
/// </summary>
public string DbRestore(string url)
{
if(exepro()!=true)//Gespeicherte Prozedur ausführen
{
return "Operation failed"
}
else
{
SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
try
{
oSQLServer.LoginSecure
= false;
oRestore.Action
= SQLDMO.SQLDMO_RESTORE_TYPE .SQLDMORestore_Database;
oRestore.Files
= url;//@"d:Northwind.bak";
oRestore.ReplaceDatabase = true
;
return "ok
"
?
uid ="+uid+";pwd="+pwd+";database=master");
SqlCommand cmd = new SqlCommand("killspid",conn1);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@dbname " ,"port");
try
{
conn1.Open();
cmd.ExecuteNonQuery();
return true;
}
Catch(Exception ex)
{
return false;
}
Finally
{
conn1.Close();
}
}
}
}