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)
Verwenden des Systems;
Verwenden von System.Configuration;
Verwenden von System.Data.SqlClient;
Verwenden von System.Data;
Namespace web.base_class
{
/// <Zusammenfassung>
/// Die DbOper-Klasse verwendet hauptsächlich SQLDMO, um die Sicherung und Wiederherstellung der Microsoft SQL Server-Datenbank zu realisieren
/// </summary>
öffentliche Klasse DbOper
{
privater String-Server;
private String-UID;
privater String pwd;
private String-Datenbank;
private String-Verbindung;
/// <Zusammenfassung>
/// Konstruktor der DbOper-Klasse
/// </summary>
öffentlicher DbOper()
{
conn=System.Configuration.ConfigurationSettings.AppSettings["constr"].ToString();
server=cut(conn,"server=",";");
uid=cut(conn,"uid=",";");
pwd=cut(conn,"pwd=",";");
Datenbank=cut(conn,"database=",";");
}
öffentlicher String-Schnitt (String str, String BG, String Ed)
{
string sub;
sub=str.Substring(str.IndexOf(bg)+bg.Length);
sub=sub.Substring(0,sub.IndexOf(";"));
Return-Sub;
}
/// <Zusammenfassung>
/// Datenbanksicherung
/// </summary>
öffentlicher Bool DbBackup(String-URL)
{
SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
versuchen
{
oSQLServer.LoginSecure = false;
oSQLServer.Connect(server,uid, pwd);
oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
oBackup.Database = Datenbank;
oBackup.Files = url;//"d:Northwind.bak";
oBackup.BackupSetName = Datenbank;
oBackup.BackupSetDescription = "Datenbanksicherung";
oBackup.Initialize = true;
oBackup.SQLBackup(oSQLServer);
return true;
}
fangen
{
return false;
werfen;
}
Endlich
{
oSQLServer.DisConnect();
}
}
/// <Zusammenfassung>
/// Datenbankwiederherstellung
/// </summary>
Öffentlicher String DbRestore(String-URL)
{
if(exepro()!=true)//Führen Sie die gespeicherte Prozedur aus
{
return „Vorgang fehlgeschlagen“;
}
anders
{
SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
versuchen
{
oSQLServer.LoginSecure = false;
oSQLServer.Connect(server, uid, pwd);
oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
oRestore.Database = Datenbank;
oRestore.Files = url;//@"d:Northwind.bak";
oRestore.FileNumber = 1;
oRestore.ReplaceDatabase = true;
oRestore.SQLRestore(oSQLServer);
gib „ok“ zurück;
}
Catch (Ausnahme e)
{
return „Fehler beim Wiederherstellen der Datenbank“;
werfen;
}
Endlich
{
oSQLServer.DisConnect();
}
}
}
privater bool exepro()
{
SqlConnection conn1 = new SqlConnection("server="+server+";uid="+uid+";pwd="+pwd+";database=master");
SqlCommand cmd = new SqlCommand("killspid",conn1);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@dbname","port");
versuchen
{
conn1.Open();
cmd.ExecuteNonQuery();
return true;
}
Catch (Ausnahme ex)
{
return false;
}
Endlich
{
conn1.Close();
}
}
}
}