2010-03-23 13 views
5

मैं प्रोग्रामिंग रूप से SQL सर्वर पर टीसीपी कनेक्शन सक्षम करना चाहता हूं। मेरा मानना ​​है कि हम रजिस्ट्री प्रविष्टियों को संशोधित करके और SQL सर्वर सेवा को पुनरारंभ करके इसे प्राप्त कर सकते हैं। मुझे किस रजिस्ट्री को संपादित करना चाहिए?एसक्यूएल सर्वर 2005 और 2008 पर टीसीपी को सक्षम करने के लिए रजिस्ट्री सेटिंग्स क्या हैं?

उत्तर

7

जब तक आपके पास रजिस्ट्री को सीधे संशोधित करने का कोई अच्छा कारण न हो, तो मेरा सुझाव है कि आप WMI का उपयोग करने पर विचार करें। डब्ल्यूएमआई आपको एक और संस्करण अज्ञेय कार्यान्वयन प्रदान करेगा। System.Management नामस्थान के माध्यम से डब्ल्यूएमआई का उपयोग किया जा सकता है। आपके पास ऐसा कोड हो सकता है जो ऐसा कुछ दिखता हो।

using System.Management; 

Sql Protocols ब्लॉग एक article कि क्या इसके बाद के संस्करण कोड क्या कर रहा है के रूप में कुछ विस्तार में चला जाता है है:

public void EnableSqlServerTcp(string serverName, string instanceName) 
{ 
    ManagementScope scope = 
      new ManagementScope(@"\\" + serverName + 
           @"\root\Microsoft\SqlServer\ComputerManagement"); 
    ManagementClass sqlService = 
      new ManagementClass(scope, 
           new ManagementPath("SqlService"), null); 
    ManagementClass serverProtocol = 
      new ManagementClass(scope, 
           new ManagementPath("ServerNetworkProtocol"), null); 

    sqlService.Get(); 
    serverProtocol.Get(); 

    foreach (ManagementObject prot in serverProtocol.GetInstances()) 
    { 
     prot.Get(); 
     if ((string)prot.GetPropertyValue("ProtocolName") == "Tcp" && 
      (string)prot.GetPropertyValue("InstanceName") == instanceName) 
     { 
      prot.InvokeMethod("SetEnable", null); 
     } 
    } 

    uint sqlServerService = 1; 
    uint sqlServiceStopped = 1; 
    foreach (ManagementObject instance in sqlService.GetInstances()) 
    { 
     if ((uint)instance.GetPropertyValue("SqlServiceType") == sqlServerService && 
      (string)instance.GetPropertyValue("ServiceName") == instanceName) 
     { 
      instance.Get(); 
      if ((uint)instance.GetPropertyValue("State") != sqlServiceStopped) 
      { 
       instance.InvokeMethod("StopService", null); 
      } 
      instance.InvokeMethod("StartService", null); 
     } 
    } 
} 

इस कोड System.Management.dll के लिए एक परियोजना संदर्भ और कथन का उपयोग निम्न मान लिया गया है।

नोट: यदि कोई फ़ायरवॉल बंदरगाहों को अवरुद्ध कर रहा है तो भी आप टीसीपी के माध्यम से सर्वर तक पहुंचने में असमर्थ होंगे।

+0

हमने आपके कोड का उपयोग नहीं किया है, हालांकि WMI – Rohit

+0

@ रोहित: इसे सुनकर खुशी हुई। – VoidDweller

3

HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\Tcp हाइव पर एक नज़र डालें। Enabled, ListenOnAllIPs जैसी कुंजियां हैं और सुनने के लिए आईपी पते की एक सूची है।

संबंधित मुद्दे