SSMS
 sql >> Teknologi Basis Data >  >> Database Tools >> SSMS

Bagaimana cara menghapus entri server di Layar Terhubung ke Server SQL Server Management Studio?

Sepertinya file ini adalah versi serial biner dari Microsoft.SqlServer.Management.UserSettings.SqlStudio kelas yang ditentukan dalam Microsoft.SqlServer.Management.UserSettings, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 perakitan (terletak di c:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Microsoft.SqlServer.Management.UserSettings.dll ).

Dengan sedikit keterampilan pengembangan (Visual Studio atau bahkan Powershell), Anda dapat membatalkan serialisasi file ini ke dalam kelas aslinya, menemukan entri yang ingin Anda hapus, dan membuat serial ulang file tersebut.

Ini akan memberi Anda ide (mengerjakan salinan file .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);

Setelah pertanyaan Adrian, saya mencoba ini lagi pada kotak Win7 x64 menggunakan Visual Studio 2010. Saya menemukan kesalahan yang sama, jadi, setelah menggali sedikit, saya menemukan beberapa langkah untuk menyelesaikannya.

  1. Tetapkan target Platform ke 'x86' di properti proyek
  2. tambahkan referensi ke Microsoft.SqlServer.Management.SDK.SqlStudio (di kotak saya ini ada di c:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Microsoft.SqlServer.Management .Sdk.SqlStudio.dll)
  3. menambahkan referensi ke Microsoft.SqlServer.Management.UserSettings (di direktori yang sama dengan direktori sebelumnya)
  4. melakukan resolusi perakitan khusus

Resolusi Majelis khusus membutuhkan sedikit waktu karena tidak jelas (bagi saya, setidaknya) mengapa CLR tidak hanya menyelesaikan Majelis dengan benar dan mengapa Visual Studio tidak mengizinkan saya untuk menambahkan referensi secara manual. Saya berbicara tentang SqlWorkbench.Interfaces.dll.

Kode yang diperbarui terlihat seperti ini:

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. DBeaver
  2.   
  3. phpMyAdmin
  4.   
  5. Navicat
  6.   
  7. SSMS
  8.   
  9. MySQL Workbench
  10.   
  11. SQLyog
  1. Alternatif Mac untuk studio manajemen server SQL?

  2. mssql '5 (Akses ditolak.)' kesalahan selama memulihkan basis data

  3. Bagaimana cara melihat paket SSIS di SQL Server Management Studio?

  4. Gabungkan pilih 1 Pernyataan SQL teratas

  5. Mengisi Drop down dengan nilai-nilai dari database di play frame work