Neben den auf einem SQL-Server implementierten regelmäßigen Voll- und Log-Sicherungen ist es oft ganz praktisch manuell eine Sicherung durchführen zu können. Dabei sollen mehrere Datenbanken hintereinander weg mit nur wenigen Klicks gesichert werden. Dieser Tipp zeigt, wie die auf einem MS SQL-Server vorhandenen Datenbanken angezeigt, zur Sicherung benutzerdefiniert ausgewählt und anschließend gesichert werden. Erstellen Sie ein neues Windows-Forms Projekt und platzieren auf die Form folgende Controls:
Und hier der Code der Form: Imports System.IO Imports System.Data Imports System.Data.SqlClient Public Class Form1 ' ----------------------------- Einstellungen ----------------------- ' Damit man bei der Sicherung von größeren Datenbanken in keinen ' Timeout läuft, hier: 300 = 300 Sekunden Private ConnStr As String = "Data Source=.\;" & _ "Initial Catalog=Master;" & _ "Integrated Security=True;" & _ "Connection Timeout=300" ' Verzeichnis auf dem SQL-Server in dem die Sicherung abgelegt wird: Private FilePath4BackupDatabase_AusSichtDesServers As String = "" ' ------------------------------------------------------------------- ' ListBox1 enthält alle auf dem Server verfügbaren Datenbanken. ' ListBox1 wird hier gefüllt: Private dv As DataView Private Sub FillListBox1() Try ListBox1.DataSource = Nothing Dim conn As New SqlConnection conn.ConnectionString = ConnStr Dim cmd As New SqlCommand cmd.Connection = conn conn.Open() Dim da As New SqlDataAdapter( _ "select Name from sys.databases order by Name", conn) Dim dt As New DataTable da.Fill(dt) dv = New DataView(dt) ListBox1.DataSource = dv ListBox1.ValueMember = "Name" ListBox1.DisplayMember = "Name" conn.Close() Catch ex As Exception End Try End Sub ' Nach Auswahl eines Eintrages aus ListBox1 wird mit einem ' Klick auf den btnAdd dieser Eintrag zur ListBox2 hinzugefügt. ' Alle in ListBox2 aufgeführten Datenbanken sollen im weiteren ' Verlauf gesichert werden. Private Sub btnAdd_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnAdd.Click btnAddAll.Enabled = False Try Dim Item_ As String = dv(ListBox1.SelectedIndex).Row("Name").ToString If Not ListBox2.Items.Contains(Item_) Then ListBox2.Items.Add(Item_) End If dv(ListBox1.SelectedIndex).Delete() Catch ex As Exception End Try btnAddAll.Enabled = (ListBox1.Items.Count > 0) btnReset.Enabled = (ListBox2.Items.Count > 0) btnSave.Enabled = (txtFolder.TextLength > 0 AndAlso _ ListBox2.Items.Count > 0) End Sub ' Durch Klick auf den Button btnAddAll werden alle in der ' ListBox1 aufgeführten Datenbanken in die ListBox2 hinzugefügt. Private Sub btnAddAlle_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnAddAll.Click btnAdd.Enabled = False Try Dim CountItems As Integer = ListBox1.Items.Count For i As Integer = 0 To CountItems - 1 ListBox1.SelectedIndex = 0 Dim Item_ As String = dv(ListBox1.SelectedIndex).Row("Name").ToString ListBox2.Items.Add(Item_) dv(ListBox1.SelectedIndex).Delete() Next Catch ex As Exception End Try btnAddAll.Enabled = (ListBox1.Items.Count > 0) btnReset.Enabled = (ListBox2.Items.Count > 0) btnSave.Enabled = (txtFolder.TextLength > 0 AndAlso _ ListBox2.Items.Count > 0) End Sub ' Der btnReset macht die bisherigen Auswahleinstellungen rückgängig, ' d. h. entfernt die bisher für die Sicherung ausgewählten ' Datenbanken aus ListBox2 und stellt den urspr. Zustand auch in ' ListBox1 wieder her: Private Sub btnReset_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnReset.Click FillListBox1() ListBox2.Items.Clear() btnAdd.Enabled = ListBox1.SelectedIndex >= 0 btnAddAll.Enabled = ListBox1.Items.Count > 0 btnReset.Enabled = False btnSave.Enabled = (txtFolder.TextLength > 0 AndAlso _ ListBox2.Items.Count > 0) End Sub ' Durch Klick auf den btnSave wird die Sicherung gestartet: Private Sub btnSave_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnSave.Click Backup() End Sub Private Sub Backup() ' Damit man keinen Background-Worker einbauen muss, kann man ' auch einfach die Form für die Zeit der Durchführung ' der Sicherung minimieren: Me.WindowState = FormWindowState.Minimized If ListBox2.Items.Count > 0 Then Backup_Databases() End If Me.WindowState = FormWindowState.Normal End Sub Private Sub Backup_Databases() ' Für jeden Eintrag (Datenbank) in ListBox2 wird nun ' die Sicherung durchgeführt: Dim i As Integer = ListBox2.Items.Count For i_ As Integer = 0 To i - 1 ListBox2.SelectedIndex = i_ Try ' Sicherung der Datenbank durchführen: Dim conn As New SqlConnection conn.ConnectionString = ConnStr Dim cmd As New SqlCommand cmd.Connection = conn cmd.CommandText = "use Master; backup database " & _ ListBox2.SelectedItem.ToString.Trim & _ " to Disk = '" & _ FilePath4BackupDatabase_AusSichtDesServers & _ "\" & ListBox2.SelectedItem.ToString.Trim & _ ".bak' with init;" cmd.CommandType = CommandType.Text conn.Open() cmd.ExecuteNonQuery() conn.Close() Catch ex As Exception Me.WindowState = FormWindowState.Normal MessageBox.Show(ex.Message.ToString, "Fehler", _ MessageBoxButtons.OK, MessageBoxIcon.Error) End Try Next End Sub Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load ' ListBox1 mit den verfügbaren Datenbanken füllen. ' Durch Auswahl der Buttons btnAdd bzw. btnAddAll, können ' zur ListBox2 aus der ListBox1 die Datenbanken hinzugefügt ' werden, die im weiteren Verlauf gesichert werden sollen: FillListBox1() txtFolder.Text = "D:\Backup" End Sub Private Sub txtFolder_TextChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles txtFolder.TextChanged ' Prüfen btnSave.Enabled = (txtFolder.TextLength > 0 AndAlso _ ListBox2.Items.Count > 0) End Sub Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged btnAdd.Enabled = (ListBox1.SelectedIndex >= 0) btnAddAll.Enabled = (ListBox1.Items.Count > 0) End Sub Private Sub ListBox2_SelectedIndexChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles ListBox2.SelectedIndexChanged btnReset.Enabled = (ListBox2.Items.Count > 0) End Sub End Class Dieser Tipp wurde bereits 13.792 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 Neu! sevCommand 4.0 Professionelle Schaltflächen im modernen Design! Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |