Определить версию SQL Server из ADO.NET - PullRequest
13 голосов
/ 04 июня 2009

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

Спасибо, MagicAndi

Обновление

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

Ответы [ 5 ]

17 голосов
/ 04 июня 2009

Этот код определяет версию используемой базы данных 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 :

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();
}
12 голосов
/ 04 июня 2009
SqlConnection con = new SqlConnection("Server=localhost;Database=test;user=admin;password=123456;");
con.Open();
Text = con.ServerVersion;
con.Close();

con.ServerVersion даст вам:

  • 9.x.x для SQL Server 2005
  • 10.x.x для SQL Server 2008
7 голосов
/ 04 июня 2009

Запустите этот скрипт из обычного 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'

Марк

6 голосов
/ 04 июня 2009
2 голосов
/ 04 июня 2009

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

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

...