Очередной интересный топик на сайте www.gotdotnet.ru
файл http://www.gotdotnet.ru/files/6101/
Автор .
Это окно подключения к SQL серверу. Написан очень хорошо, но есть пару деталей которые НУЖНО добавить в код. (в принципе в любую программу всегда есть что добавить и надеемся что автор не обидится на эти слова)
Окно выглядит так:

Первое что исправим это список серверов. Список создается так:
Dim ds = SqlDataSourceEnumerator.Instance.GetDataSources()
а в комбобокс выводится:
cbxServer.DisplayMember = "ServerName"
а нужно выводить не просто имя сервера, а имя\имя экземпляря. Сделаем это так:
Dim ds = SqlDataSourceEnumerator.Instance.GetDataSources()
ds.Columns.Add("ServerNameAndInstanceName", GetType(System.String))
Dim dr As DataRow
For Each dr In ds.Rows
dr("ServerNameAndInstanceName") = dr("ServerName")
If Not IsDBNull(dr("InstanceName")) Then
dr("ServerNameAndInstanceName") &= "\" & dr("InstanceName")
End If
Next
Теперь о втором, в программе список серверов формируется в новом потоке (это классно), и после того как список формирован его нужно отдать на съедение комбобоксу. Комбобок у нас в потоке формы, значит достучатся к нему можно только через Invoke. Все работает,но ошибка появляется когда мы открываем форму и тут же его закрываем, получаем это:

заменим этот код на :
If Me.InvokeRequired Then
Me.Invoke(New WaitCallback(AddressOf SetUp), ds)
End If
теперь все работает
Скачать код