2011-06-03 12 views
32

Duplicar posibles:
How to remove “Server name” items from history of SQL Server Management StudioCómo eliminar las entradas del servidor en la pantalla "Conectar con el servidor" de SQL Server Management Studio?

En la pantalla "Conectar al servidor", tiendas de SQL Server Management Studio todas las entradas que ha entrado nunca para Nombre del servidor, nombre de usuario y contraseña. Esto es muy útil, pero de vez en cuando las cosas cambian, las direcciones de los servidores cambian, las bases de datos ya no están disponibles.

¿Cómo puedo eliminar las entradas del servidor de esta pantalla? Además, cuando selecciona un servidor, los inicios de sesión pasados ​​están disponibles en la lista. Una vez más, estos cambian. ¿Cómo puedo eliminar entradas de usuario?

Connect to Server screen

Respuesta

3

Por desgracia, no parece ser posible (o al menos práctico) para eliminar sólo ciertos artículos.

Sin embargo, si lo desea, puede restablecer la configuración y comenzar desde cero.

Asegúrese Management Studio se cierra, a continuación, eliminar o cambiar el nombre de este archivo:

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

Tenga en cuenta que el archivo contiene otras configuraciones de preferencia del usuario, por lo que si ha personalizado la configuración de Management Studio, tendrá algo de trabajo para restaurarlos.

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

Buena suerte!

+1

¿No pudo Microsoft haberlo convertido en un archivo XML? ¿Qué tan difícil podría ser? :( Bueno, dado que perderé * cada * personalización y * todos * elementos, creo que ya no quiero hacerlo más –

+0

Sí, apesta. Busqué información sobre el formato/editabilidad de SqlStudio.bin , pero no pude encontrar nada. Por desgracia, –

+1

Para referencias futuras a esta pregunta, edité su respuesta para que el lector sepa que no se puede hacer, luego ofrece la solución alternativa. Y luego la acepté. –

38

Parece que este archivo es una versión serializada binario de la clase Microsoft.SqlServer.Management.UserSettings.SqlStudio se define en las Microsoft.SqlServer.Management.UserSettings, versión = 10.0.0.0, Culture = neutral, PublicKeyToken = 89845dcd8080cc91 de ensamblaje (ubicado en c: \ Archivos de programa \ Microsoft SQL Server \ 100 \ Tools \ Binn \ VSShell \ Common7 \ IDE \ Microsoft.SqlServer.Management.UserSettings.dll).

Con un poco de habilidad de desarrollo (Visual Studio o incluso Powershell) puede deserializar este archivo en la clase original, encontrar las entradas que desea eliminar y volver a serializar el archivo de nuevo.

Esto debe darle la idea (que trabaja en una copia del archivo .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); 

Después de la pregunta de Adrian, yo probamos este nuevo en una caja x64 Win7 utilizando Visual Studio 2010. Me Encontré el mismo error así que, después de cavar un poco, descubrí que tomó varios pasos para resolverlo.

  1. fijado el objetivo de la plataforma de 'x 86' en las propiedades del proyecto
  2. añadir una referencia a Microsoft.SqlServer.Management.SDK.SqlStudio (en mi caja de esto fue en c: \ Archivos de programa \ Microsoft SQL Server \ 100 \ Tools \ Binn \ VSShell \ Common7 \ IDE \ Microsoft.SqlServer.Management.Sdk.SqlStudio.dll)
  3. agregue una referencia a Microsoft.SqlServer.Management.UserSettings (en el mismo directorio en el anterior)
  4. realizar la resolución de ensamblado personalizado

La resolución ensamblado personalizado tomó un poco de hacer, ya que no era obvio (para mí, al menos) por qué el wouldn CLR Simplemente resuelvo el ensamblaje correctamente y por qué Visual Studio no me permitió agregar la referencia manualmente. Estoy hablando de SqlWorkbench.Interfaces.dll.

El código actualizado es así:

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

¡Esto es oro puro! Estoy ejecutando algunas pruebas y es increíble. Te mantendré informado sobre mi desarrollo ... –

+1

'binaryFormatter.Serialize (outStream, configuración);' arroja una excepción: 'Escriba 'System.Runtime.Serialization.TypeLoadExceptionHolder' en Assembly ' mscorlib, Ve rsion = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089 'no está marcado como serializable. ¿Sabes cómo puedo serializarlo de nuevo en un archivo bin? –

+0

Muchas gracias. Trabajado como un encanto. – Beniamin

5

Tomé el código de @ arcticdev de correos y la convirtieron en una aplicación de consola. Se puede descargar here. la aplicación espera que SqlStudio.bin esté en la carpeta que la aplicación está ejecutando en y la OVERWRITE (haga una copia de seguridad) y toma el nombre del servidor como argumento.

Probado en Windows 7 (x64) y SSMS 2008.

Cuestiones relacionadas