با آمدن 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;
}
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;
}
}