vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Sch?tzen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 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: VB2008 - VB201521.02.17
Prüfen, ob eine SQL-Datenbank offline ist und gegbenenfalls online setzen

Es werden Funktionen gezeigt, die die im Titel angesprochene Prüfung gestattet und die entsprechend reagieren können.

Autor:   Dietrich HerrmannBewertung:     [ Jetzt bewerten ]Views:  1.313 
ohne HomepageSystem:  Vista, Win7, Win8, Win10kein Beispielprojekt 

Summer-Special bei Tools & Components!
Gute Laune Sommer bei Tools & Components
Top Summer-Special - Sparen Sie teilweise bis zu 120,- EUR
Alle sev-Entwicklerkomponenten und Komplettpakete jetzt bis zu 25% reduziert!
zum Beispiel:
  • Developer CD nur 479,20 EUR statt 599,- EUR
  • sevDTA 3.0 nur 224,30 EUR statt 299,- EUR
  •  
  • vb@rchiv   Vol.6 nur 20,00 EUR statt 24,95 EUR
  • sevCoolbar 3.0 nur 55,20 EUR statt 69,- EUR
  • - Werbung -Und viele weitere Angebote           Aktionspreise nur für kurze Zeit gültig

    Zunächst ein Link zu den Definitionen von sys.databases:
     https://msdn.microsoft.com/de-de/library/ms178534(v=sql.120).aspx

    Manchmal kann es vorkommen, dass eine SQL-Datenbank bei Computerstart zum SQL-Server nicht verbunden wird, also den Staus OFFLINE erhält. Eine Anwendung, die mit dieser DB arbeiten soll kann diesen Zustand mit den im Folgenden dargestellten Funktionen feststellen und reagieren.

    Zunächst benötigt man beim Start der Anwendung eine Verbindung zum Server, DB master.

    Dim proofConn As New SqlConnection With {.ConnectionString = "Data Source=.\" _
      + serverName + ";Initial Catalog=master" _
      + ";Integrated Security=SSPI;Asynchronous Processing=True"}

    (mit serverName ist deine SQL-Server-Instanz gemeint)

    Dann kann man bei Start der Anwendung die Funktion zum Prüfen des DB-Status anwenden:

    Die Funktion:

    ''' <summary>
    '''    Prüfen des Datenbank-Status am SQL-Server
    ''' </summary>
    ''' <param name="conn">die SQL-Connection</param>
    ''' <param name="DBName">der Datenbankname</param>
    ''' <returns>Rückgabe des Status als String</returns>
    Public Function ProofTableState(conn As SqlConnection, DBName As String) As String
      Dim sqlStr As String =
        "SELECT state_desc FROM sys.databases WHERE name='" + DBName + "'"
      Dim st As String
      Dim cmd As New SqlCommand
      With conn
        .Open()
        cmd = New SqlCommand(sqlStr, conn)
        st = cmd.ExecuteScalar
        cmd.Dispose()
        .Close()
      End With
      Return st
    End Function

    Verwendung der Funktion:

    Dim dbOffOn As String = ProofTableState(proofConn, databankName)

    Man erhält als Rückgabe den Status der Datenbank als String.
    Mithilfe einer Fallunterscheidung kann man auf das Statusergebnis reagieren:

    Select Case dbOffOn
      Case "OFFLINE"
        DB_SetOnline(proofConn, databankName)
      Case "ONLINE"
      Case "RECOVERY_PENDING"    ' Wiederherstellung steht aus
        DB_SetOffline(proofConn, databankName)
        DB_SetOnline(proofConn, databankName)
    End Select

    Speziell ist hier der Fall "RECOVERY_PENDING" (bedeutet: Wiederherstellung der Datenbank steht aus).
    In dem Fall kann die Datenbank durch zunächst Offline setzen und anschließendes Online setzen verfügbar gemacht werden.

    In der Fallunterscheidung werden die folgenden zwei Funktionen für das OFF- bzw. ONLINE-Setzen der Datenbank benötigt:

    ''' <summary>
    '''   Setzen des Datenbank-Status auf OFFLINE
    ''' </summary>
    ''' <param name="oConn">die SQL-Connection</param>
    ''' <param name="DBName">der Datenbankname</param>
    ''' <returns></returns>
    Public Function DB_SetOffline(ByRef oConn As SqlConnection, ByVal DBName As String) As Boolean
      Dim sqlStr As String = "ALTER DATABASE [" + DBName + "] SET OFFLINE WITH ROLLBACK IMMEDIATE"
      Return ActionWithTable(oConn, DBName, sqlStr)
    End Function
    ''' <summary>
    '''   Setzen des Datenbank-Status auf ONLINE
    ''' </summary>
    ''' <param name="oConn">die SQL-Connection</param>
    ''' <param name="DBName">der Datenbankname</param>
    ''' <returns></returns>
    Public Function DB_SetOnline(ByRef oConn As SqlConnection, ByVal DBName As String) As Boolean
      Dim sqlStr As String = "ALTER DATABASE [" + DBName + "] SET ONLINE"
      Return ActionWithTable(oConn, DBName, sqlStr)
    End Function

    Außerdem wird noch diese Hilfsfunktion benötigt:

    ''' <summary>
    ''' Aktion mit Datentabelle ausführen, bspw. DELETE, TRUNCATE o.ä.
    ''' </summary>
    ''' <param name="conn">SQL-Verbindung</param>
    ''' <param name="tblName">Tabellenname</param>
    ''' <param name="query">Query-String für die Aktion</param>
    ''' <param name="flag">Message zeigen ja|nein</param>
    Public Function ActionWithTable(ByVal conn As SqlConnection, ByVal tblName As String,
      query As String, Optional flag As Boolean = True)
     
      Try
        Dim cmd As New SqlCommand
        With cmd
          .Connection = conn
          .CommandType = CommandType.Text
          .CommandText = query
          If conn.State <> ConnectionState.Open Then conn.Open()
          .ExecuteNonQuery()
          conn.Close()
        End With
      Catch ex As Exception
        MessageBox.Show(ex.Message.ToString, "FEHLER", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Clipboard.SetText(ex.Message.ToString)
        conn.Close()
      Finally
        If flag Then
          Dim t As String = "Aktion mit " + tblName + " erfolgreich!"
          MessageBox.Show(t, "ACTION", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
      End Try
    End Function

    Dieser Tipp wurde bereits 1.313 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.

    Neue Diskussion eröffnen

    nach obenzurück


    Anzeige

    Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

    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