SSMS
 sql >> база данни >  >> Database Tools >> SSMS

Как да изтриете сървърни записи в екрана за свързване към сървъра на SQL Server Management Studio?

Изглежда, че този файл е двоична сериализирана версия на 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 ).

С малко умения за разработка (Visual Studio или дори Powershell) можете да десериализирате този файл в оригиналния клас, да намерите записите, които искате да премахнете, и да сериализирате отново файла.

Това трябва да ви даде идеята (работа върху копие на .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);

След въпроса на Адриан, опитах това отново на Win7 x64 кутия, използвайки Visual Studio 2010. Открих същата грешка, така че след като се поразрових, открих, че са необходими няколко стъпки за разрешаване.

  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. извършете персонализирана разделителна способност на сглобяване

Персонализираната разделителна способност на сглобяването отне малко работа, тъй като не беше очевидно (поне за мен) защо CLR просто няма да разреши сглобката правилно и защо Visual Studio не ми позволи да добавя препратката ръчно. Говоря за 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. SQL групиране на Acct числа и получаване на междинни суми и обща сума

  2. Къде е SQL Server Management Studio 2012?

  3. Sql Server Management Studio Object Explorer изчезна - липсва - изчезна

  4. Как мога да изпълня набор от .SQL файлове от SSMS?

  5. SQL Server 2008 - Прикачване на mdf без журнал - Грешка в операционната система 5:5 (Достъпът е отказан.)