2012-04-24 86 views
0

使用SQL查询或WMI,我想要检索是否启用SQL协议(如命名管道,TCP/IP)。检索SQL协议状态

我需要为SQL Server 2000,2005年做到这一点,2008年

谢谢。

回答

1

WMI Provider for Configuration Management Classes包括ServerNetworkProtocol WMI类,其中列出安装的Microsoft SQL Server实例的协议,这个类位于root\Microsoft\SqlServer\ComputerManagement10命名空间(SQL Server 2008中,在其他版本中,你必须修改命名空间)。

检查这个C#示例

using System; 
using System.Collections.Generic; 
using System.Management; 
using System.Text; 

namespace GetWMI_Info 
{ 
    class Program 
    { 

     static void Main(string[] args) 
     { 
      try 
      { 
       string ComputerName = "localhost"; 
       ManagementScope Scope;     

       if (!ComputerName.Equals("localhost", StringComparison.OrdinalIgnoreCase)) 
       { 
        ConnectionOptions Conn = new ConnectionOptions(); 
        Conn.Username = ""; 
        Conn.Password = ""; 
        Conn.Authority = "ntlmdomain:DOMAIN"; 
        Scope = new ManagementScope(String.Format("\\\\{0}\\root\\Microsoft\\SqlServer\\ComputerManagement10", ComputerName), Conn); 
       } 
       else 
        Scope = new ManagementScope(String.Format("\\\\{0}\\root\\Microsoft\\SqlServer\\ComputerManagement10", ComputerName), null); 

       Scope.Connect(); 
       ObjectQuery Query = new ObjectQuery("SELECT * FROM ServerNetworkProtocol"); 
       ManagementObjectSearcher Searcher = new ManagementObjectSearcher(Scope, Query); 

       foreach (ManagementObject WmiObject in Searcher.Get()) 
       { 
        Console.WriteLine("{0,-35} {1,-40}","ProtocolDisplayName",WmiObject["ProtocolDisplayName"]);// String 
        Console.WriteLine("{0,-35} {1,-40}","Enabled",WmiObject["Enabled"]);// Boolean 
        Console.WriteLine("{0,-35} {1,-40}","InstanceName",WmiObject["InstanceName"]);// String 
        Console.WriteLine("{0,-35} {1,-40}","MultiIpConfigurationSupport",WmiObject["MultiIpConfigurationSupport"]);// Boolean 
        Console.WriteLine("{0,-35} {1,-40}","ProtocolName",WmiObject["ProtocolName"]);// String 
        Console.WriteLine(); 


       } 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(String.Format("Exception {0} Trace {1}",e.Message,e.StackTrace)); 
      } 
      Console.WriteLine("Press Enter to exit"); 
      Console.Read(); 
     } 
    } 
} 

这将返回这样的事情

ProtocolDisplayName     Shared Memory 
Enabled        True 
InstanceName      MSSQLSERVER 
MultiIpConfigurationSupport   False 
ProtocolName      Sm 

ProtocolDisplayName     Named Pipes 
Enabled        False 
InstanceName      MSSQLSERVER 
MultiIpConfigurationSupport   False 
ProtocolName      Np 

ProtocolDisplayName     TCP/IP 
Enabled        True 
InstanceName      MSSQLSERVER 
MultiIpConfigurationSupport   True 
ProtocolName      Tcp 

ProtocolDisplayName     VIA 
Enabled        False 
InstanceName      MSSQLSERVER 
MultiIpConfigurationSupport   False 
ProtocolName      Via 
+0

thanx的帮助,但是上面的代码抛出一个异常在我的Windows Server 2008 64位。 – John 2012-04-24 09:33:58

+0

你收到什么错误? – RRUZ 2012-04-24 10:02:16

+0

自动化错误,系统找不到指定的文件 – John 2012-04-24 12:41:13