33 votes

Comment supprimer des entrées de serveur dans l'écran "Connexion au serveur" de SQL Server Management Studio?

Double Possible:
Comment faire pour supprimer “nom du Serveur” les éléments de l'histoire de SQL Server Management Studio

Dans la "connexion au Serveur" de l'écran, SQL Server Management Studio stocke toutes les entrées que vous avez jamais entré pour le Nom du Serveur, le login et le mot de passe. C'est très utile, mais de temps en temps les choses changent, adresses des serveurs de changement, les bases de données ne sont plus disponibles.

Comment puis-je supprimer les entrées de serveur à partir de cet écran? Aussi, lorsque vous sélectionnez un serveur, passé les connexions sont disponibles dans la liste. Encore une fois, ces changements. Comment puis-je supprimer des entrées de l'utilisateur?

Connect to Server screen

40voto

arcticdev Points 341

Regarde comme c'est un fichier binaire version sérialisée de l' Microsoft.SqlServer.Management.UserSettings.SqlStudio classe définie dans le Microsoft.SqlServer.De la gestion.UserSettings, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 assemblée (situé à c:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Microsoft.SqlServer.Management.UserSettings.dll).

Avec un peu de développement des compétences (Visual Studio ou même Powershell) vous pouvez désérialiser ce fichier dans la classe d'origine, de trouver les entrées que vous souhaitez supprimer et ré-arranger le fichier de retour.

Cela devrait vous donner l'idée de travailler sur une copie de la .fichier 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);

Après Adrian question, j'ai essayé ce nouveau sur un Win7 x64 boîte à l'aide de Visual Studio 2010. J'ai trouvé la même erreur donc, après avoir creusé un peu, j'ai trouvé qu'il a pris un certain nombre de mesures pour les résoudre.

  1. Mettez la Plate-forme cible pour 'x86' dans les propriétés du projet
  2. ajouter une référence à Microsoft.SqlServer.De la gestion.SDK.SqlStudio (sur ma boîte, c'était à c:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Microsoft.SqlServer.Management.Sdk.SqlStudio.dll)
  3. ajouter une référence à Microsoft.SqlServer.De la gestion.UserSettings (dans le même répertoire à la précédente)
  4. effectuer personnalisé résolution de l'assemblée

La coutume résolution de l'assemblée a pris un peu de le faire puisqu'il n'était pas évident (pour moi, au moins) pourquoi le CLR ne serait pas juste de résoudre l'assemblée correctement et pourquoi Visual Studio ne me permet pas d'ajouter la référence manuellement. Je parle de l'SqlWorkbench.Interfaces.dll.

La mise à jour du code ressemble à ceci:

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);
        }
    }

5voto

Eonasdan Points 3788

J'ai pris le code du message de @ arcticdev et je l'ai transformé en une application console. Il peut être téléchargé ici . l'application s'attend à ce que SqlStudio.bin se trouve dans le dossier dans lequel l'application est en cours d'exécution et qu'il écrase (sauvegarde) !! et prend le nom du serveur en tant qu'argument.

Testé sur Windows 7 (x64) et SSMS 2008.

3voto

Michael Ames Points 1811

Malheureusement, il ne semble pas possible (ou au moins pratiques) seulement de supprimer certains articles.

Toutefois, si vous le souhaitez, vous pouvez réinitialiser la configuration et commencer à partir de zéro.

Assurez-vous que la Gestion de Studio est fermé, puis de les supprimer ou de renommer ce fichier:

%APPDATA%\Microsoft\Microsoft SQL Server\100\Tools\Shell\SqlStudio.bin

Notez que ce fichier contient d'autres réglages des préférences utilisateur, donc si vous avez personnalisé votre Gestion de configuration de Studio, vous allez avoir un peu de travail à faire restaurer.

Référence: http://social.msdn.microsoft.com/Forums/en-US/sqltools/thread/94e5c3ca-c76d-48d0-ad96-8348883e8db8/

Bonne chance!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X