2009-06-04 14 views
11

Necesito determinar la versión de SQL Server (2000, 2005 o 2008 en este caso particular) que una cadena de conexión conecta una aplicación de consola C# (.NET 2.0). ¿Alguien puede proporcionar alguna orientación sobre esto?Determine la versión de SQL Server de ADO.NET

Gracias, MagicAndi

actualización

Me gustaría ser capaz de determinar la versión de SQL Server forman el objeto de conexión ADO.NET si es posible.

Respuesta

16

Este código será determinar la versión de la base de datos de SQL Server está utilizando - 2000, 2005 o 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); 

} 

El código siguiente hará lo mismo , esta vez usando NinthSense's respuesta:

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, excelente captura en Smo.Server! Mi mal :-( – MagicAndi

2

La versión del servidor también está disponible como una propiedad (cadena) en el objeto Connection y como una propiedad SqlVersion en ServerConnection.

Y SQL2008 es la versión> = 10

6

Ejecutar este proceso a partir de un SqlCommand normales - es bastante extensa y útil!

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, no era exactamente lo que estaba buscando, ¡pero muy útil! +1 – MagicAndi

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

con.ServerVersion le dará:

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

+1 limpio! No era consciente de esto. –

+1

La respuesta marcada a esta pregunta es increíblemente compleja, publicó dos minutos después de que se hizo la pregunta, y por el mismo autor. La respuesta correcta a esta pregunta es esta. Muy simple, como debería ser. – Brain2000

+0

Hace poco publiqué una solución compleja, pero no dependiente del servidor sql para esto - http://blog.ninethsense.com/2015/09/get-list-of-installed-sql-server.html – NinethSense

Cuestiones relacionadas