2009-06-04 48 views
11

我需要确定连接字符串连接C#控制台应用程序(.NET 2.0)的SQL Server版本(在这种特殊情况下为2000,2005或2008)。任何人都可以提供任何指导吗?从ADO.NET确定SQL Server的版本

感谢,MagicAndi

更新

我想能够确定是否可以在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 2009-06-04 11:37:01

2

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

和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 2009-06-04 11:35:29

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