sql >> データベース >  >> Database Tools >> SSMS

SQL Server Management Studioの[サーバーへの接続]画面でサーバーエントリを削除するにはどうすればよいですか?

    このファイルは、Microsoft.SqlServer.Management.UserSettings.SqlStudioのバイナリシリアル化バージョンのようです。 Microsoft.SqlServer.Management.UserSettings、Version =10.0.0.0、Culture =neutral、PublicKeyToken =89845dcd8080cc91で定義されたクラス アセンブリ( c:\ Program Files \ 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);
    

    エイドリアンの質問の後、Visual Studio2010を使用してWin7x64ボックスでこれを再試行しました。同じエラーが見つかったので、少し掘り下げた後、解決するためにいくつかの手順が必要であることがわかりました。

    1. プロジェクトのプロパティでプラットフォームターゲットを「x86」に設定します
    2. Microsoft.SqlServer.Management.SDK.SqlStudioへの参照を追加します(私のボックスでは、これはc:\ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \ VSShell \ Common7 \ IDE\Microsoft.SqlServer.Managementにありました。 .Sdk.SqlStudio.dll)
    3. Microsoft.SqlServer.Management.UserSettingsへの参照を追加します(前のディレクトリと同じディレクトリにあります)
    4. カスタムアセンブリ解決を実行する

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


    1. phpMyAdminエラー:テーブルがエンジンに存在しません

    2. 特定の日時範囲内でMySQLにランダムな日付を更新/挿入する方法

    3. SQLServerクエリのパフォーマンスを向上させるための可能な手順

    4. 最初の0が消えますか?