1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
// **********************************************
// Dies ist eines der 322 Rezepte aus dem
// C# 2005 Premium Codebook.
// Das Snippet wurde vom Autor mit freundlicher
// Genehmigung von Addison Wesley
// bei dotnet-snippets.de veröffentlicht.
// **********************************************
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
public class SqlServerBackup
{
/// <summary>
/// Wird beim Fortschritt des Backup oder Restore aufgerufen
/// </summary>
public event PercentCompleteEventHandler
PercentComplete;
/// <summary>
/// Erzeugt ein Backup einer Datenbank
/// </summary>
/// <param name="serverName">Der Name des SQL Servers</param>
/// <param name="databaseName">Der Name der zu sichernden Datenbank</param>
/// <param name="backupFileName">Der Name der Datei, in die das Backup geschrieben werden soll</param>
/// <param name="useTrustedConnection">Gibt an, ob eine vertraute Verbindung verwendet werden soll</param>
/// <param name="login">Login-Name für den Login falls keine vertraute Verbindung verwendet werden soll</param>
/// <param name="password">Passwort für den Login falls keine vertraute Verbindung verwendet werden soll</param>
public void CreateBackupToFile(string serverName, string databaseName,
string backupFileName, bool useTrustedConnection, string login,
string password)
{
// Verbindungsinformationen definieren
ServerConnection serverConnection = new ServerConnection();
serverConnection.ServerInstance = serverName;
if (useTrustedConnection)
{
serverConnection.LoginSecure = true;
}
else
{
serverConnection.LoginSecure = false;
serverConnection.Login = login;
serverConnection.Password = password;
}
// Verbindung aufbauen
Server server = new Server(serverConnection);
try
{
server.ConnectionContext.Connect();
// Backup in die angegebene Datei erstellen
Backup backup = new Backup();
backup.Action = BackupActionType.Files;
backup.Database = databaseName;
if (this.PercentComplete != null)
{
backup.PercentComplete += this.PercentComplete;
}
backup.Devices.Add(new BackupDeviceItem(
backupFileName, DeviceType.File));
backup.SqlBackup(server);
}
finally
{
try
{
// Verbindung zum SQL-Server abbauen
server.ConnectionContext.Disconnect();
}
catch { }
}
}
/// <summary>
/// Restauriert ein Backup einer Datenbank
/// </summary>
/// <param name="serverName">Der Name des SQL Servers</param>
/// <param name="databaseName">Der Name der wiederherzustellenden Datenbank</param>
/// <param name="backupFileName">Der Name der Datei, die das Backup enthält</param>
/// <param name="useTrustedConnection">Gibt an, ob eine vertraute Verbindung verwendet werden soll</param>
/// <param name="login">Login-Name für den Login falls keine vertraute Verbindung verwendet werden soll</param>
/// <param name="password">Passwort für den Login falls keine vertraute Verbindung verwendet werden soll</param>
public void RestoreFromFile(string serverName, string databaseName,
string backupFileName, bool useTrustedConnection, string login,
string password)
{
// Verbindungsinformationen definieren
ServerConnection serverConnection = new ServerConnection();
serverConnection.ServerInstance = serverName;
if (useTrustedConnection)
{
serverConnection.LoginSecure = true;
}
else
{
serverConnection.LoginSecure = false;
serverConnection.Login = login;
serverConnection.Password = password;
}
// Verbindung aufbauen
Server server = new Server(serverConnection);
try
{
server.ConnectionContext.Connect();
// Restore aus der angegebenen Datei
Restore restore = new Restore();
restore.Action = RestoreActionType.Database;
restore.Database = databaseName;
if (this.PercentComplete != null)
{
restore.PercentComplete += this.PercentComplete;
}
restore.Devices.Add(new BackupDeviceItem(
backupFileName, DeviceType.File));
restore.SqlRestore(server);
}
finally
{
try
{
// Verbindung zum SQL-Server abbauen
server.ConnectionContext.Disconnect();
}
catch { }
}
}
}
|