Member 7681233 Ответов: 1

C# : проблема с SqlDataSourceEnumerator.Пример.GetDataSources()


Привет

Я пытаюсь включить все экземпляры SQL Server (локальные и сетевые) в ComboBox, используя следующий код:

DataTable dt = null;
        dt = System.Data.Sql.SqlDataSourceEnumerator.Instance.GetDataSources();
        foreach (DataRow dr in dt.Rows)
        {
          ComboBox1.Items.Add(dr[0].ToString() + "\\" + dr[1].ToString());
        }


Он прекрасно работает на 32-битной Windows XP, 64-битной Windows 7, заручившись всеми моими локальными и сетевыми экземплярами sql server в комбо, но когда этот фрагмент кода запускается на 32-битной Windows 7 (все профессиональные версии), требуется много времени, чтобы получить сведения об экземпляре, и в конечном итоге не удается заручиться даже одним экземпляром (что, как я полагаю, связано с каким-то таймаутом). В таблице данных в этом случае нет ни одной строки. Таким образом я хочу задать следующие вопросы:

1. Является ли эта проблема специфичной для платформы или ОС?

2. Действительно ли это связано с низкой скоростью сети/ большим количеством экземпляров сервера в сети?

3. Существует ли какая-либо альтернатива этому требованию, которая не зависит от платформы или фреймворка, как

SmoApplication.EnumAvailableSqlServers(false); // local and Network SQL instances


это должна найти зависимые.

У меня есть по крайней мере 17-20 сетевых серверов SQL Server, которые я ожидаю, что эта функция вернется. Поэтому я не могу понять, как это могло произойти? Я сталкиваюсь с этой проблемой именно на Windows 7 32bit (профессиональная версия).

Спасибо

Хемант Джайсвал

1 Ответов

Рейтинг:
0

Reza Mansoori

Здравствуй, дорогой
У меня есть 32-разрядная операционная система Windows 7 Ultimate , два sql-сервера на моем компьютере,
MSSQLSERVER и MSSQLEXPRESS я копирую ваш код и запускаю i время , затрачиваемое на заполнение ComboBox , составляло около 3 секунд, я думаю, что это хорошее время, но я не являюсь узлом в сети,
Я предлагаю вам , если этот код потребляет слишком много времени, запустить его в вашей программе асинхронно или в другом потоке, в результате чего вы основной поток и форма не зависают