sql >> Databáze >  >> Database Tools >> SSMS

Jak odstranit položky serveru na obrazovce Připojit k serveru SQL Server Management Studio?

Zdá se, že tento soubor je binární serializovaná verze Microsoft.SqlServer.Management.UserSettings.SqlStudio třída definovaná v Microsoft.SqlServer.Management.UserSettings, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 sestavení (umístěné na c:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Microsoft.SqlServer.Management.UserSettings.dll ).

S trochou vývojářských dovedností (Visual Studio nebo dokonce Powershell) můžete deserializovat tento soubor do původní třídy, najít položky, které chcete odstranit, a znovu soubor znovu serializovat.

To by vám mělo dát nápad (pracujte na kopii souboru .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 Adrianově otázce jsem to zkusil znovu na Win7 x64 boxu pomocí Visual Studia 2010. Našel jsem stejnou chybu, takže po hloubání jsem zjistil, že řešení vyžadovalo několik kroků.

  1. Ve vlastnostech projektu nastavte cíl platformy na 'x86'
  2. přidat odkaz na Microsoft.SqlServer.Management.SDK.SqlStudio (na mé krabici to bylo na c:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Microsoft.SqlServer.Management .Sdk.SqlStudio.dll)
  3. přidejte odkaz na Microsoft.SqlServer.Management.UserSettings (ve stejném adresáři jako v předchozím)
  4. provádět vlastní rozlišení sestavení

Rozlišení vlastního sestavení dalo trochu práce, protože nebylo zřejmé (alespoň mně), proč CLR nevyřeší sestavení správně a proč mi Visual Studio nedovolí přidat odkaz ručně. Mluvím o SqlWorkbench.Interfaces.dll.

Aktualizovaný kód vypadá takto:

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. phpmyadmin přesunout text z jednoho pole do druhého

  2. Generování skriptů na základě podmínky

  3. Jak si udělím přístup správce k místní instanci serveru SQL?

  4. Jaký je snadný způsob importu velké databáze do mysql pomocí phpmyadmin?