2009-06-04 5 views
11

Ich muss die Version von SQL Server (2000, 2005 oder 2008 in diesem speziellen Fall) feststellen, dass eine Verbindungszeichenfolge eine C# -Konsolenanwendung (.NET 2.0) verbindet. Kann jemand dazu eine Anleitung geben?Ermitteln der Version von SQL Server von ADO.NET

Danke, MagicAndi

aktualisiert

Ich möchte in der Lage sein, die SQL Server-Version zu bestimmen, um das Objekt ADO.NET-Verbindung zu bilden, wenn möglich.

Antwort

16

Dieser Code wird die Version von SQL Server-Datenbank wird verwendet, bestimmen - 2000, 2005 oder 2008:

try 
{ 
    SqlConnection sqlConnection = new SqlConnection(connectionString); 
    Microsoft.SqlServer.Management.Smo.Server server = new Microsoft.SqlServer.Management.Smo.Server(new Microsoft.SqlServer.Management.Common.ServerConnection(sqlConnection)); 

    switch (server.Information.Version.Major) 
    { 
     case 8: 
     MessageBox.Show("SQL Server 2000"); 
     break; 
     case 9: 
     MessageBox.Show("SQL Server 2005"); 
     break; 
     case 10: 
     MessageBox.Show("SQL Server 2008"); 
       break; 
     default: 
     MessageBox.Show(string.Format("SQL Server {0}", server.Information.Version.Major.ToString())); 
     break; 
    } 
} 
catch (Microsoft.SqlServer.Management.Common.ConnectionFailureException) 
{ 
    MessageBox.Show("Unable to connect to server", 
     "Invalid Server", MessageBoxButtons.OK, MessageBoxIcon.Error); 

} 

Der folgende Code das gleiche tun , diesmal mit NinthSense's antwort:

try 
{  
    SqlConnection sqlConnection = new SqlConnection(connectionString); 
    sqlConnection.Open(); 

    string serverVersion = sqlConnection.ServerVersion; 
    string[] serverVersionDetails = serverVersion.Split(new string[] {"."}, StringSplitOptions.None); 

    int versionNumber = int.Parse(serverVersionDetails[0]); 

    switch (versionNumber) 
    { 
     case 8: 
      MessageBox.Show("SQL Server 2000"); 
      break; 
     case 9: 
      MessageBox.Show("SQL Server 2005"); 
      break; 
     case 10: 
      MessageBox.Show("SQL Server 2008"); 
      break; 
     default: 
      MessageBox.Show(string.Format("SQL Server {0}", versionNumber.ToString())); 
      break; 
    } 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(string.Format("Unable to connect to server due to exception: {1}", ex.Message), 
     "Invalid Connection!", MessageBoxButtons.OK, MessageBoxIcon.Error); 

} 
finally 
{ 
    sqlConnection.Close(); 
} 
+0

Richard, ausgezeichneter Fang auf dem Smo.Server! Mein schlechtes :-( – MagicAndi

2

Die Serverversion ist auch als Eigenschaft (Zeichenfolge) im Connection-Objekt und als SqlVersion-Eigenschaft in der ServerConnection verfügbar.

Und SQL2008 ist Version> = 10

6

Führen Sie dieses Skript aus einer normalen SqlCommand - es ist recht umfangreich und nützlich!

SELECT 
    SERVERPROPERTY('productversion') as 'Product Version', 
    SERVERPROPERTY('productlevel') as 'Patch Level', 
    SERVERPROPERTY('edition') as 'Product Edition', 
    SERVERPROPERTY('buildclrversion') as 'CLR Version', 
    SERVERPROPERTY('collation') as 'Default Collation', 
    SERVERPROPERTY('instancename') as 'Instance', 
    SERVERPROPERTY('lcid') as 'LCID', 
    SERVERPROPERTY('servername') as 'Server Name' 

Marc

+1

Marc_s, War nicht ganz das, was ich suchte, aber sehr nützlich, unabhängig! +1 – MagicAndi

11
SqlConnection con = new SqlConnection("Server=localhost;Database=test;user=admin;password=123456;"); 
con.Open(); 
Text = con.ServerVersion; 
con.Close(); 

con.ServerVersion geben Ihnen:

  • 9.xx für SQL Server 2005
  • 10.xx für SQL Server 2008
+1

+1 ordentlich! War davon nicht bewusst. –

+1

Die markierte Antwort auf diese Frage ist wahnsinnig komplex, gepostet zwei Minuten nach der Frage und vom selben Autor. Die eigentliche richtige Antwort auf diese Frage ist diese. Sehr einfache Liner, wie es sein sollte. – Brain2000

+0

Ich habe vor kurzem eine komplexe, aber nicht-SQL-Server-abhängige Lösung gebloggt dafür - http://blog.ninethrense.com/2015/09/get-list-of-installed-sql-server.html – NinethSense

Verwandte Themen