۱۳۸۷/۰۸/۲۸

پيدا كردن ليست SQL server هاي نصب شده در يك شبكه



با آمدن SQL server 2008 استفاده از كتابخانه SQL-DMO براي انجام يك سري از امور بر روي اس كيوال سرور با استفاده از برنامه نويسي منسوخ شد. يكي از توانايي‌هاي اين كتابخانه ليست كردن سرورهاي اس كيوال (قابل دسترسي) موجود در شبكه بود.
براي مثال توسط اين كتابخانه به صورت زير مي‌توان اينكار را انجام داد:
در قطعه كد زير فرض بر اين است كه ارجاعي به كتابخانه sqldmo را در برگه com مربوط به project->add reference اضافه كرده‌ايد:

using SQLDMO;
using System.Collections.Generic;

public static List<string> GetSQLServersList2()
{
List<string> result = new List<string>();
ApplicationClass sqlApp = new ApplicationClass();
NameList lst = sqlApp.ListAvailableSQLServers();
for (int i = 1; i <= lst.Count; i++)
result.Add(lst.Item(i));
lst = null;
sqlApp = null;

return result;

}

با منسوخ شدن اين كتابخانه COM (كه تنها تا اس كيوال سرور 2005 پشتيباني مي‌شود)، در نگارش‌هاي جديد (و قديم) اس كيوال سرور، با استفاده از قطعه كد زير مي‌توان ليست تمام SQL server هاي نصب شده در يك شبكه به همراه instance هاي آنها را بدست آورد.

using System.Collections.Generic;
using System.Data;
using System.Data.Sql;

public class CListServers
{
public static List<string> GetSQLServersList()
{
List<string> result = new List<string>();

// Retrieve the enumerator instance and then the data.
var instance = SqlDataSourceEnumerator.Instance;
var table = instance.GetDataSources();

// Display the contents of the table.
foreach (DataRow row in table.Rows)
{
result.Add(string.Format("{0}\\{1}", row[0], row[1]));
}

return result;
}
}

راه ديگر:
كتابخانه COM ياد شده (SQL-DMO) در SQL server 2008 با كتابخانه SMO جايگزين شده است.
در اين حالت خواهيم داشت:

using System.Collections.Generic;
using System.Data;
using Microsoft.SqlServer.Management.Smo;

public class CListServers
{
public static List<string> GetSQLServersListSMO()
{
List<string> result = new List<string>();
DataTable dt = SmoApplication.EnumAvailableSqlServers(false);
if (dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
result.Add(dr["Name"].ToString());
}
}
return result;
}
}

تقريبا كليه اعمالي كه از طريق management studio قابل انجام هستند با كمك اين كتابخانه نيز از طريق برنامه نويسي مي‌توان به آن‌ها پرداخت. براي مثال تهيه اسكريپت كليه جداول ، تريگرها و غيره.