PDA

View Full Version : سوال: بدست آوردن لیست سرورهای نصب شده در سیستم



طبیب دل
شنبه 27 اسفند 1390, 15:15 عصر
با سلام به دوستان
ببخشید اگر سئوالم تکراری است هر چی سرچ می کنم به جواب نمی رسم
چطور می تونم لیست instance های نصب شده روی یک سیستم local رو بدست بیارم منظورم همون لیستی است که در sql2005 موقع اتصال نمایش میده.
با تشکر

طبیب دل
سه شنبه 08 فروردین 1391, 12:46 عصر
چرا هیچ کسی جواب نمیده
ببینید دوستان من می خوام قسمت مشخص شده در عکس ضمیمه رو بدست بیارم از کد زیر استفاده می کنم ولی جواب نمیده لطفا کمک کنید84748

SqlDataSourceEnumerator instance = SqlDataSourceEnumerator.Instance;
System.Data.DataTable table = instance.GetDataSources();
for (int count = 0; count < table.Rows.Count; count++)
{
if (table.Rows[count]["instanceName"].ToString() != "")
comboBox1.Items.Add(table.Rows[count]["serverName"].ToString() + "\\" + table.Rows[count]["instanceName"].ToString());
else
comboBox1.Items.Add(table.Rows[count]["serverName"].ToString());
}
comboBox1.SelectedItem = comboBox1.Items[0];

یادآوری میکنم که برنامه شبکه نیست فقط می خوام کاربر بتونه sqlexpress رو انتخاب کنه

aslan
سه شنبه 08 فروردین 1391, 13:14 عصر
http://www.aspsnippets.com/Articles/List-Installed-SQL-Server-Instances-on-machine-and-LAN-using-C-and-VB.Net.aspx
http://stackoverflow.com/questions/141154/how-can-i-determine-installed-sql-server-instances-and-their-versions

mehdi.mousavi
سه شنبه 08 فروردین 1391, 13:42 عصر
سلام.
کدی که نوشته اید اصلا خوانا نیست. قبل از هر چیز اونو به کد زیر تغییر بدید:

using (System.Data.DataTable table = SqlDataSourceEnumerator.Instance.GetDataSources())
{
foreach (System.Data.DataRow row in table.Rows)
{
string name = (string)row["ServerName"];
string instanceName = (string)row["InstanceName"];

if (!string.IsNullOrEmpty(instanceName))
name += "\\" + instanceName;

this.comboBox1.Items.Add(name);
}
}


اما در مورد مشکل اصلی... GetDataSources در حالت های زیر کلیه SQL Server Instance ها رو به درستی برنمیگردونه:


SQL Browser در حالت Running نباشه.
پورت 1433 TCP/IP و پورت 1434 UDP توسط Firewall (یا دیگر نرم افزارها) Block شده باشه.
بدلیل Network Latency، Warmup Phase و ... Load شدن SQL Server قدری زمان ببره (که این باعث میشه فراخوانی مجدد متود GetDataSources لیستی متفاوت از لیست بدست آمده از قراخوانی اول به شما بده).
هنگامیکه چند تا Instance رو ماشین نصب شده باشه و Default Instance، آخرین نسخه موجود در کلید Registry باشه (بخش Workaround رو در این URL بخونید (http://connect.microsoft.com/SQLServer/feedback/details/146323/enumavailablesqlservers-or-sqldatasourceenumerator-incorrect-list-of-available-databases)).
اگر HideInstance Flag برای اون Instance ای که لیست شده، Yes باشه، اون Instance توسط GetDataSources برگردونده نمیشه.

شاید خوندن این مقاله (http://sqlblogcasts.com/blogs/jonsayce/archive/2008/02/10/programatically-listing-sql-servers.aspx) به شما کمک کنه...



موفق باشید.