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.
die
Datenbankverbindungszeichenfolge in web.config ist constr)
using
System.Data.SqlClient
;
using
System.Data
;
<summary >
/// DbOper-Klasse, verwendet hauptsächlich SQLDMO, um die Sicherung und Wiederherstellung der Microsoft SQL Server-Datenbank zu implementieren
. /// </summary>
public class DbOper
{
privatestring
server
;
private
string data;
string conn ;
/// <summary>
/// Konstruktor der DbOper-Klasse
/// </summary>
public DbOper()
{
conn
=System.Configuration.ConfigurationSettings["constr"].ToString();
( conn,"server=",";");
uid=cut(conn,"uid=",";");
pwd=cut(conn,"pwd=",";")
; , "database=", ";");
}
public
string cut(string str,string bg,string ed)
{
string
sub=str.Substring(str.IndexOf(bg)+bg.Length);
. Substring(0,sub.IndexOf(";")
)
;
/// <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();
}
}
}
}