SSMS
 sql >> डेटाबेस >  >> Database Tools >> SSMS

SQL सर्वर प्रबंधन स्टूडियो के सर्वर स्क्रीन से कनेक्ट में सर्वर प्रविष्टियों को कैसे हटाएं?

ऐसा लगता है कि यह फ़ाइल Microsoft.SqlServer.Management.UserSettings.SqlStudio का बाइनरी क्रमांकित संस्करण है। Microsoft.SqlServer.Management.UserSettings, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 में परिभाषित वर्ग असेंबली (c:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Microsoft.SqlServer.Management.UserSettings.dll पर स्थित) )।

थोड़े से विकास कौशल (विजुअल स्टूडियो या यहां तक ​​​​कि पॉवरशेल) के साथ आप इस फ़ाइल को मूल वर्ग में डिसेर्बलाइज़ कर सकते हैं, उन प्रविष्टियों को ढूंढ सकते हैं जिन्हें आप हटाना चाहते हैं और फ़ाइल को फिर से क्रमबद्ध करें।

यह आपको विचार देना चाहिए (.bin फ़ाइल की एक प्रति पर काम करना)...

var binaryFormatter = new BinaryFormatter();
var inStream = new MemoryStream(File.ReadAllBytes(@"c:\temp\SqlStudio.bin"));
var settings = (SqlStudio) binaryFormatter.Deserialize(inStream);
foreach (var pair in settings.SSMS.ConnectionOptions.ServerTypes)
{
    ServerTypeItem serverTypeItem = pair.Value;
    List<ServerConnectionItem> toRemove = new List<ServerConnectionItem>();
    foreach (ServerConnectionItem server in serverTypeItem.Servers)
    {
        if (server.Instance != "the server you want to remove")
        {
            continue;
        }
        toRemove.Add(server);
    }
    foreach (ServerConnectionItem serverConnectionItem in toRemove)
    {
        serverTypeItem.Servers.RemoveItem(serverConnectionItem);
    }
}

MemoryStream outStream = new MemoryStream();
binaryFormatter.Serialize(outStream, settings);
byte[] outBytes = new byte[outStream.Length];
outStream.Position = 0;
outStream.Read(outBytes, 0, outBytes.Length);
File.WriteAllBytes(@"c:\temp\SqlStudio.bin", outBytes);

एड्रियन के प्रश्न के बाद, मैंने विजुअल स्टूडियो 2010 का उपयोग करके Win7 x64 बॉक्स पर इसे फिर से करने की कोशिश की। मुझे वही त्रुटि मिली, इसलिए थोड़ा खोदने के बाद मैंने पाया कि इसे हल करने के लिए कई कदम उठाए गए।

  1. प्रोजेक्ट गुणों में प्लेटफ़ॉर्म लक्ष्य को 'x86' पर सेट करें
  2. Microsoft.SqlServer.Management.SDK.SqlStudio के लिए एक संदर्भ जोड़ें (मेरे बॉक्स पर यह c:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Microsoft.SqlServer.Management पर था। .Sdk.SqlStudio.dll)
  3. Microsoft.SqlServer.Management.UserSettings का संदर्भ जोड़ें (पिछली निर्देशिका में उसी निर्देशिका में)
  4. कस्टम असेंबली रिज़ॉल्यूशन निष्पादित करें

कस्टम असेंबली रिज़ॉल्यूशन ने थोड़ा सा काम किया क्योंकि यह स्पष्ट नहीं था (मेरे लिए, कम से कम) क्यों सीएलआर असेंबली को सही तरीके से हल नहीं करेगा और विजुअल स्टूडियो मुझे मैन्युअल रूप से संदर्भ जोड़ने की अनुमति क्यों नहीं देगा। मैं SqlWorkbench.Interfaces.dll के बारे में बात कर रहा हूँ।

अपडेट किया गया कोड इस तरह दिखता है:

internal class Program
    {
        static void Main(string[] args)
        {
            AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

            var binaryFormatter = new BinaryFormatter();
            var inStream = new MemoryStream(File.ReadAllBytes(@"c:\temp\SqlStudio.bin"));
            var settings = (SqlStudio) binaryFormatter.Deserialize(inStream);
            foreach (var pair in settings.SSMS.ConnectionOptions.ServerTypes)
            {
                ServerTypeItem serverTypeItem = pair.Value;

                List<ServerConnectionItem> toRemove = new List<ServerConnectionItem>();
                foreach (ServerConnectionItem server in serverTypeItem.Servers)
                {
                    if (server.Instance != "the server you want to remove")
                    {
                        continue;
                    }
                    toRemove.Add(server);
                }
                foreach (ServerConnectionItem serverConnectionItem in toRemove)
                {
                    serverTypeItem.Servers.RemoveItem(serverConnectionItem);
                }
            }


            MemoryStream outStream = new MemoryStream();
            binaryFormatter.Serialize(outStream, settings);
            byte[] outBytes = new byte[outStream.Length];
            outStream.Position = 0;
            outStream.Read(outBytes, 0, outBytes.Length);
            File.WriteAllBytes(@"c:\temp\SqlStudio.bin", outBytes);
        }

        private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            Debug.WriteLine(args.Name);
            if (args.Name.StartsWith("SqlWorkbench.Interfaces"))
            {
                return Assembly.LoadFrom(@"C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\SqlWorkbench.Interfaces.dll");
            }
            return Assembly.Load(args.Name);
        }
    }


  1. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. SSMS एक्स्टेंसिबिलिटी / एडिन - वर्तमान डेटाबेस और सर्वर प्राप्त करें

  2. समान आईडी वाली पंक्तियों के समूहों को दूसरी तालिका में स्थानांतरित करना

  3. मैं विंडोज प्रमाणीकरण (-ई,) के साथ SQLCMD का उपयोग कैसे कर सकता हूं, लेकिन बिना उन्नत अनुमतियों के

  4. SQL सर्वर विश्लेषण सेवाओं से कनेक्ट नहीं हो सकता, भले ही यह चल रहा हो

  5. Intellisense काम नहीं कर रहा SSMS 2014