Double Possible:
Comment faire pour supprimer “nom du Serveur” les éléments de l'histoire de SQL Server Management StudioDans 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?
Réponses
Trop de publicités?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.
- Mettez la Plate-forme cible pour 'x86' dans les propriétés du projet
- 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)
- ajouter une référence à Microsoft.SqlServer.De la gestion.UserSettings (dans le même répertoire à la précédente)
- 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);
}
}
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.
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!