【问题标题】:Determine version of SQL Server from ADO.NET从 ADO.NET 确定 SQL Server 的版本
【发布时间】:2009-06-04 10:58:38
【问题描述】:

我需要确定连接字符串连接 C# 控制台应用程序 (.NET 2.0) 的 SQL Server 版本(在本例中为 2000、2005 或 2008)。任何人都可以提供任何指导吗?

谢谢,MagicAndi

更新

如果可能,我希望能够从 ADO.NET 连接对象中确定 SQL Server 版本。

【问题讨论】:

    标签: c# .net sql-server ado.net .net-2.0


    【解决方案1】:

    此代码将确定正在使用的 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();
    }
    

    【讨论】:

      【解决方案2】:
      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

      【讨论】:

      • 这个问题的标记答案非常复杂,在提出问题两分钟后发布,并且由同一作者发布。这个问题的实际正确答案是这个。非常简单的一个班轮,应该是这样。
      • 我最近在博客上写了一个复杂但不依赖于 sql-server 的解决方案 - blog.ninethsense.com/2015/09/…
      • @NinethSense 链接断开
      【解决方案3】:

      从一个普通的 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'
      

      马克

      【讨论】:

      • Marc_s,不是我想要的,但无论如何都非常有用! +1
      【解决方案4】:

      【讨论】:

      • thijs,我可以使用它,但正在寻找一种从 ADO.NET 连接中确定版本信息的方法。我会相应地更新问题。
      【解决方案5】:

      服务器版本也可用作 Connection 对象的(字符串)属性和 ServerConnection 的 SqlVersion 属性。

      而 SQl2008 是版本 >= 10

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-04
        • 1970-01-01
        相关资源
        最近更新 更多