2009-06-04 2 views
11

Мне нужно определить версию SQL Server (2000, 2005 или 2008 в данном конкретном случае), что строка подключения соединяет консольное приложение C# (.NET 2.0). Может ли кто-нибудь дать какие-либо рекомендации по этому поводу?Определить версию SQL Server из ADO.NET

Спасибо, MagicAndi

Update

Я хотел бы быть в состоянии определить версию SQL Server образуют объект подключения ADO.NET, если это возможно.

ответ

16

Этот код будет определить версию базы данных SQL Server используется - 2000, 2005 или 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); 

} 

ниже код будет делать то же самое , на этот раз с использованием NinthSense's Ответ:

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

Ричард, отличный улов на Smo.Server! Мой плохой :-( – MagicAndi

5
+0

thij s, я мог бы использовать это, но искал способ определения информации о версии из соединения ADO.NET. Я уточню вопрос соответствующим образом. – MagicAndi

+0

пожара это выберите с помощью ExecuteScalar и проанализируйте результат ... – thijs

2

Версия сервера также доступна как свойство (string) объекта Connection и как свойство SqlVersion в ServerConnection.

И SQL2008 это версия> = 10

6

Выполнить этот сценарий из нормального SqlCommand - это довольно обширная и полезная!

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' 

Марк

+1

Marc_s, Не совсем то, что я искал, но очень полезно независимо! +1 – MagicAndi

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

con.ServerVersion даст вам:

  • 9.xx для SQL Server 2005
  • 10.xx для SQL Server 2008
+1

+1 neat! Не знал об этом. –

+1

Отмеченный ответ на этот вопрос безумно сложный, минут после того, как был задан вопрос, и тем же автором. Фактический правильный ответ на этот вопрос - это один. Очень простой один лайнер, как и должно быть. – Brain2000

+0

Недавно я написал сообщение о сложном, но не sql-сервере-зависимом решении для этого - http://blog.ninethsense.com/2015/09/get-list-of-installed-sql-server.html – NinethSense

Смежные вопросы