Zunächst ein Link zu den Definitionen von sys.databases: 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. 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 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 9.146 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 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. |
Neu! sevPopUp 2.0 Dynamische Kontextmenüs! Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... 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 Access-Tools Vol.1 Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
||||||||||||||||
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. |