vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Datenbanken · ADO.NET Allgemein   |   VB-Versionen: VB2010 - VB201525.02.24
Ermitteln der installierten SQL-Serverversion auf zwei Arten

Die gezeigte Funktion ermittelt auf 2 Arten von Serverversion, einerseits eine umfangreiche Beschreibung und andererseits die im SSMS verwendete aus einer Enumeration. (VS 2022, Win 11)

Autor:   Dietrich HerrmannBewertung:     [ Jetzt bewerten ]Views:  858 
ohne HomepageSystem:  Win7, Win8, Win10, Win11kein Beispielprojekt 

Die Funktion verlangt:

Imports System.Management
Imports Microsoft.SqlServer.Management.Smo

Folgende Parameter:

  • den ConnectionString zum Server und Datenbank
  • ein Flag für die Art der Ausgabe des Ergebnisses (True.. der Versionsstring wird nach Wörtern gesplittet ausgegeben, False.. der Versionsstring wird in einer Messagebox angezeigt)

Return:

  1. Nothing.. im Fall der Anzeige via Messagebox
  2. Ein Tupel mit: Feld mit gesplittetem String und SQLServerVersion gemäß SSMS-Enumeration

Bemerkungen:
Ausgangspunkt sind die derzeit möglichen SQL-Versionen, dargestellt im Feld versArray mit Jahreszahl und Versionsnummer. Die Messagebox-Verwendung dient nur der Information des Nutzers. Die Übergabe der Daten via Return erfolgt mit gesplittetem String, um Einzelzugriff auf bestimmte Daten im String haben zu können. Die SSMS-Version kann gebraucht werden, wenn man bspw. mittels meines Tipps  SQL-Scripts mit VB für Datenbanken erstellen programmatisch Scripts zur Datenbank erzeugen möchte.

Es braucht zur Anwendung noch zwei im Folgenden mit übergebene Hilfsfunktionen.

Die Funktion getSQLServerVersion:

''' <summary>
''' SQL Server Version (Langtext) ermitteln
''' </summary>
''' <param name="connStr">der Connectionstring</param>
''' <param name="mBox">True.. der Versionsstring wird gesplittet ausgegeben</param>
''' False.. der Versionsstring wird in einer Messagebox angezeigt
''' <returns>wenn messagebox, dann Nothing, sonst ein Feld der Wörter des Versionsstrings</returns>
Public Function getSQLServerVersion(connStr As String,
  Optional mBox As Boolean = False) _
  As Tuple(Of String(), SqlServerVersion)
 
  Dim rs(), si() As String, strVers As SqlServerVersion
 
  ' das Array der Serverversionen bzgl. der entsprechenden Enumeration im SSMS
  Dim versArray(,) As String _
    = New String(,) {{2000, 80}, {2005, 90}, {2008, 100}, {0, 0},
      {2012, 110}, {2014, 120}, {2016, 130},
      {2017, 140}, {2019, 150}, {2022, 160}}
 
  ' ermitteln der Serverversion mittels Connection zum Server
  Using connection As New SqlConnection(connStr)
    connection.Open()
    Dim cmdText As String = "Select @@version"
    Dim command As New SqlCommand(cmdText, connection)
    Dim reader As SqlDataReader = command.ExecuteReader()
    While reader.Read()
      rs = Split(reader.GetString(0), vbLf)
      If Not mBox Then
        MessageBox.Show(reader.GetString(0))
        Return Nothing
      End If
    End While
    reader.Close()
    connection.Close()
  End Using
 
  ' ermitteln der Serverversion aus SSMS-Enumeration
  si = IndexofMultiDimStr(versArray, CShort(mitteTeilWorte(rs(0), 3, 3)))
  strVers = si(0)
 
  Return Tuple.Create(rs, strVers)
End Function

Zugriff auf die Ergebnisse:

Dim sp() As String, sv As SqlServerVersion
Dim st As Tuple(Of String(), SqlServerVersion)
st = getSQLServerVersion(MyConnectionString, True)
sp = st.Item1
sv.Item2

Die beiden Hilfsfunktionen:

''' <summary>
''' Suchen eines Wertes im 2-dimensionalen Array
''' </summary>
''' <param name="theArray">das zu durchsuchende Feld</param>
''' <param name="theValue">der zu suchende Wert</param>
''' <returns>wenn Wert nicht gefunden => Nothing
''' wenn Wert gefunden => 2-dim. Feld mit den Indizes des Wertes</returns>
Public Function IndexofMultiDimStr(theArray(,) As String, theValue As String) As String()
  Dim w As Boolean = False
  Dim i, j As Short
  Dim rnk As Short = theArray.Rank
  Dim u1 As Short = UBound(theArray, 1)
  Dim u2 As Short = UBound(theArray, 2)
  Dim tmp(1) As String
 
  tmp(0) = Nothing : tmp(1) = Nothing
  For i = 0 To u1
    For j = 0 To u2
      If IsNothing(theArray(i, j)) Then Return tmp
      w = theArray(i, j).Equals(theValue)
      If w Then Exit For
    Next j
    tmp(1) = j
    If w Then Exit For
  Next i
  If w Then
    tmp(0) = i
  End If
  Return tmp
End Function
' Ermitteln ein oder mehrerer Worte in einem String mittels Nummer des/der Worte
Public Function mitteTeilWorte(BaseString As String,
  Optional anf As Integer = 0, Optional ende As Integer = 0,
  Optional delim As String = " ") As String
 
  Dim spl() As String = Split(BaseString, delim)
  Dim t As String = ""
 
  If ende = 0 Then ende = spl.Length - 1
  For i As Short = anf To ende
    t += spl(i) + delim
  Next
  Return t
 End Function

Dieser Tipp wurde bereits 858 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-2024 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