2009-06-04 4 views
11

Potrzebuję określić wersję programu SQL Server (2000, 2005 lub 2008 w tym konkretnym przypadku), że ciąg połączenia łączy aplikację konsoli C# (.NET 2.0). Czy ktoś może udzielić wskazówek na ten temat?Określanie wersji programu SQL Server z ADO.NET

Dzięki MagicAndi

Aktualizacja

chciałbym być w stanie określić, tworząc obiekt połączenia ADO.NET wersja SQL Server, jeśli to możliwe.

Odpowiedz

16

Kod ten będzie określić wersję bazy danych SQL Server używany - 2000, 2005 lub 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); 

} 

Poniższy kod zrobi to samo , tym razem używając NinthSense's odpowiedź:

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, świetny połów w Smo.Server! Mój zły :-( – MagicAndi

2

Wersja serwera jest również dostępna jako właściwość (łańcuch) w obiekcie połączenia oraz jako właściwość SqlVersion w połączeniu ServerConnection.

I SQl2008 jest w wersji> = 10

6

Uruchom ten skrypt od normalnego SqlCommand - to dość obszerne i użyteczne!

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, Nie był tym, czego szukałem, ale bardzo przydatny niezależnie od tego: +1 – MagicAndi

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

con.ServerVersion daje:

  • 9.xx dla SQL Server 2005
  • 10.xx dla SQL Server 2008
+1

+1 schludny! Nie był tego świadomy –

+1

Zaznaczona odpowiedź na to pytanie jest niesamowicie złożona, opublikowana dwa razy kilka minut po zadaniu pytania i przez tego samego autora Właściwa poprawna odpowiedź na to pytanie jest bardzo prosta: bardzo prosta jedna linijka, tak jak powinna być. – Brain2000

+0

Niedawno opublikowałem blog dotyczący złożonego, ale nie zależnego od serwera SQL, rozwiązania opartego na serwerze do tego - http://blog.ninethsense.com/2015/09/get-list-of-installed-sql-server.html – NinethSense