vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2017
 
zurück
Rubrik: Datenbanken · ADO.NET Allgemein   |   VB-Versionen: VB2005, VB200827.01.10
MS SQL-Datenbank sichern

Dieser Tipp zeigt, wie man bestimmte Datenbanken eines MS SQL-Servers extern sichern kann.

Autor:   Dietmar ClassBewertung:     [ Jetzt bewerten ]Views:  9.887 
ohne HomepageSystem:  Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

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:

  • 2 ListBoxen (ListBox1 und ListBox2)
  • 3 Buttons (btnAdd, btnAddAll und btnReset)
  • 1 TextBox (txtFolder)
  • 1 weiteren Button (btnSave)

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 9.887 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Aktuelle Diskussion anzeigen (2 Beiträge)

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2017 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel