Как удалить записи сервера в SQL Server Management Studio "Подключиться к серверу"?

Возможный дубликат:
Как удалить элементы "Имя сервера" из истории SQL Server Management Studio

На экране "Подключиться к серверу" в SQL Server Management Studio хранятся все записи, которые вы когда-либо вводили для имени сервера, имени пользователя и пароля. Это очень полезно, но время от времени все меняется, изменения адресов серверов, базы данных больше недоступны.

Как удалить записи сервера с этого экрана? Кроме того, при выборе сервера в списке доступны прошлые логины. И снова это изменение. Как удалить записи пользователя?

Connect to Server screen

Ответ 1

Похоже, что этот файл представляет собой двоичную сериализованную версию класса Microsoft.SqlServer.Management.UserSettings.SqlStudio, определенную в сборке Microsoft.SqlServer.Management.UserSettings, Version = 10.0.0.0, Culture = neutral, PublicKeyToken = 89845dcd8080cc91 (находится в каталоге c:\Program Файлы \Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Microsoft.SqlServer.Management.UserSettings.dll).

С небольшим количеством навыков разработки (Visual Studio или даже Powershell) вы можете десериализовать этот файл в исходном классе, найти записи, которые хотите удалить, и повторно сериализовать файл.

Это должно дать вам идею (работа с копией файла .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);

После вопроса Adrian, я попробовал это снова в окне Win7 x64 с использованием Visual Studio 2010. Я нашел ту же ошибку, поэтому, после того, как я выкопал бит, я обнаружил, что для его решения потребовалось несколько шагов.

  • Установите целевую платформу платформы "x86" в свойствах проекта.
  • добавить ссылку на Microsoft.SqlServer.Management.SDK.SqlStudio(в моем блоке это было в c:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Microsoft.SqlServer.Management.Sdk.SqlStudio.dll)
  • добавьте ссылку на Microsoft.SqlServer.Management.UserSettings(в том же каталоге на предыдущем)
  • выполнить пользовательское разрешение сборки

Разрешение пользовательской сборки заняло немного времени, поскольку это было не очевидно (по крайней мере для меня), почему CLR не просто правильно разрешит сборку и почему Visual Studio не позволит мне добавить ссылку вручную, Я говорю о SqlWorkbench.Interfaces.dll.

Обновленный код выглядит следующим образом:

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

Ответ 2

Я взял код из сообщения @arcticdev и превратил его в консольное приложение. Его можно скачать здесь. приложение ожидает, что SqlStudio.bin будет находиться в папке, в которой приложение работает в , и будет ПЕРЕВЕРИТЬ ЭТО (создайте резервную копию!!) и берет имя сервера в качестве аргумента.

Протестировано в Windows 7 (x64) и SSMS 2008.

Ответ 3

К сожалению, не представляется возможным (или, по крайней мере, практичным) удалить некоторые элементы.

Однако, если вы хотите, вы можете reset настроить и начать с нуля.

Убедитесь, что Management Studio закрыта, затем удалите или переименуйте этот файл:

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

Обратите внимание, что этот файл содержит другие параметры предпочтений пользователя, поэтому, если вы настроили конфигурацию Management Studio, у вас будет некоторая работа по восстановлению их.

Ссылка: http://social.msdn.microsoft.com/Forums/en-US/sqltools/thread/94e5c3ca-c76d-48d0-ad96-8348883e8db8/

Удачи!