SSMS
 sql >> Baza danych >  >> Database Tools >> SSMS

Jak usunąć wpisy serwera na ekranie Połącz z serwerem programu SQL Server Management Studio?

Wygląda na to, że ten plik jest binarną serializowaną wersją Microsoft.SqlServer.Management.UserSettings.SqlStudio klasa zdefiniowana w Microsoft.SqlServer.Management.UserSettings, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 zestaw (znajdujący się w c:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Microsoft.SqlServer.Management.UserSettings.dll ).

Przy odrobinie umiejętności programistycznych (Visual Studio lub nawet Powershell) możesz zdeserializować ten plik do oryginalnej klasy, znaleźć wpisy, które chcesz usunąć i ponownie zserializować plik.

To powinno dać ci pomysł (praca na kopii pliku .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);

Po pytaniu Adriana spróbowałem tego ponownie na komputerze Win7 x64 za pomocą Visual Studio 2010. Znalazłem ten sam błąd, więc po przekopaniu się stwierdziłem, że rozwiązanie wymagało kilku kroków.

  1. Ustaw docelową platformę na „x86” we właściwościach projektu
  2. dodaj odwołanie do Microsoft.SqlServer.Management.SDK.SqlStudio (na moim pudełku było to w c:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Microsoft.SqlServer.Management .Sdk.SqlStudio.dll)
  3. dodaj odniesienie do Microsoft.SqlServer.Management.UserSettings (w tym samym katalogu co w poprzednim)
  4. wykonaj niestandardowe rozwiązanie zespołu

Niestandardowa rozdzielczość zestawu zajęła trochę czasu, ponieważ nie było oczywiste (przynajmniej dla mnie), dlaczego CLR po prostu nie rozwiązałby poprawnie zestawu i dlaczego Visual Studio nie pozwoliłby mi ręcznie dodać odwołania. Mówię o SqlWorkbench.Interfaces.dll.

Zaktualizowany kod wygląda tak:

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. Rozmiar kopii zapasowej studia Microsoft SQL Server Management jest ujemny

  2. jak wpisać wartości w kolumnie rowguid?

  3. Chcesz skryptować wszystkie obiekty, które zależą od tabeli SQL Server

  4. Jak mogę wygenerować skrypt mojej bazy danych w takiej postaci, w jakiej jest?

  5. Połącz EF ze studiem zarządzania SQL Server