Determine version of SQL Server from ADO.NET

后端 未结 5 1341
难免孤独
难免孤独 2021-01-01 19:42

I need to determine the version of SQL Server (2000, 2005 or 2008 in this particular case) that a connection string connects a C# console application (.NET 2.0). Can anyone

相关标签:
5条回答
  • 2021-01-01 19:56

    Run this script from a normal SqlCommand - it's quite extensive and useful!

    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

    0 讨论(0)
  • 2021-01-01 19:56

    Try

    Select @@version
    

    http://msdn.microsoft.com/en-us/library/ms177512(SQL.90).aspx

    0 讨论(0)
  • 2021-01-01 20:01
    SqlConnection con = new SqlConnection("Server=localhost;Database=test;user=admin;password=123456;");
    con.Open();
    Text = con.ServerVersion;
    con.Close();
    

    con.ServerVersion will give you:

    • 9.x.x for SQL Server 2005
    • 10.x.x for SQL Server 2008
    0 讨论(0)
  • 2021-01-01 20:12

    This code will determine the version of SQL Server database being used - 2000, 2005 or 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);
    
    }
    

    The code below will do the same, this time using NinthSense's answer:

    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 讨论(0)
  • 2021-01-01 20:12

    The Server version is also available as a (string) property on the Connection object and as a SqlVersion property on the ServerConnection.

    And SQl2008 is version >= 10

    0 讨论(0)
提交回复
热议问题