目前本人知道两种方法:
1:利用SQLDMO
引用sqldmo
private SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
SQLDMO.NameList sqlServers = null;
SQLDMO.NameList sqlServers = null;
sqlServers = sqlApp.ListAvailableSQLServers();
for (int i = 0; i < sqlServers.Count; i++)
{
object srv = sqlServers.Item(i + 1);
if (srv != null)
{
this.cbDBServer.Items.Add(srv);
}
}
for (int i = 0; i < sqlServers.Count; i++)
{
object srv = sqlServers.Item(i + 1);
if (srv != null)
{
this.cbDBServer.Items.Add(srv);
}
}
2:利用SqlDataSourceEnumerator
在控制台中实现将局域网中所有的SQL SERVER服务器列出来,以下仅将代码贴出:
using System.Data.Sql;
class Program
{
static void Main(string[] args)
{
{
static void Main(string[] args)
{
foreach (string str in GetSqlServerName())
{
Console.WriteLine(str);
}
{
Console.WriteLine(str);
}
Console.ReadLine();
}
}
public static string[] GetSqlServerName()
{
SqlDataSourceEnumerator sqlserver = SqlDataSourceEnumerator.Instance;
DataTable db = sqlserver.GetDataSources();
string[] Name = new string[db.Rows.Count];
for (int i = 0; i < db.Rows.Count; i++)
{
Name[i]=string.Format("IsClustered: {0:10}",db.Rows[i]["isclustered"])
{
SqlDataSourceEnumerator sqlserver = SqlDataSourceEnumerator.Instance;
DataTable db = sqlserver.GetDataSources();
string[] Name = new string[db.Rows.Count];
for (int i = 0; i < db.Rows.Count; i++)
{
Name[i]=string.Format("IsClustered: {0:10}",db.Rows[i]["isclustered"])
+ " " +
string.Format("/nServerName: {0:15}", db.Rows[i]["Servername"])
+ " " +
string.Format("/nInstanceName: {0:20}", db.Rows[i]["instancename"])
+ " " +
string.Format("/nVersion: {0:20}/n",db.Rows[i]["version"]);
}
return Name;
}
}
return Name;
}
}
GetDataSources 检索包含有关所有可见 SQL Server 2000 或 SQL Server 2005 实例的信息的
DataTable。
此方法返回的表包含以下列,所有这些列都包含字符串:
列 | 说明 |
---|---|
ServerName | 服务器名。 |
InstanceName | 服务器实例的名称。如果服务器作为默认实例运行,则为空。 |
IsClustered | 指示服务器是否是群集的一部分。 |
版本 | 服务器版本(对于 SQL Server 2000,为 8.00.x;对于 SQL Server 2005,为 9.00.x)。 |
注意 |
---|
由 SqlDataSourceEnumerator 定位网络上的数据源所使用的机制的性质决定,该方法并不总是能返回可用服务器的完整列表,该列表可能在每次调用时都不同。如果您打算使用此函数来让用户从列表中选择服务器,请确保您始终同时提供键入列表中所没有的名称的选项,以防服务器枚举未能返回所有的可用服务器。此外,此方法的执行时间可能相当长,因此如果性能要求很高,在调用此方法时应谨慎从事。 |