关于sqlserver查看当前活动服务器

filebat 2007-07-29 10:25:52
在登录"查询分析器"界面时,有一个button点击它,就可以列出所有"活动服务器"。
我的问题是,如果想通过C#来实现查看当前所有“活动服务器”的话,哪里有这方面的资料。

一个很笨的方法是:扫描局域网中所有电脑的1433端口。这样有三个问题:1)SQLSERVER的服务程序,可以通过TCP/IP, 命名管道(共享内存由于只能用于同一台机器,所以不考虑)两种。2)TCP/IP的监听端口,可能被配置成非1433端口。3)扫描网络中所有机器,效率太低
...全文
317 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
filebat 2007-07-29
  • 打赏
  • 举报
回复
我装的是vs2003,没找到SqlDataSourceEnumerator类,可能是vs2005里才有。

刚才在MSDN上查到用ODBC来实现的方法,网上有人写了一个demo。链接分别为:

http://www.aspxboy.com/private/5315/default.aspx
Enumerate SQL Server Instances in C#, Using ODBC

http://msdn2.microsoft.com/en-us/library/ms712446.aspx
SQL Server Browsing Example
zjcxc 2007-07-29
  • 打赏
  • 举报
回复
另外, 枚举依赖于 SQL Server 的配置, 如果 SQL Server 实例配置为不提供枚举所需要的信息(例如 sql 2000 设置了隐藏服务, sql 2005 关闭了 sql browser 服务)

则枚举是无效的(这个是安全的需要)
zjcxc 2007-07-29
  • 打赏
  • 举报
回复
C# 复制代码
=========================================================================

using System.Data.Sql;

class Program
{
static void Main()
{
// Retrieve the enumerator instance and then the data.
SqlDataSourceEnumerator instance =
SqlDataSourceEnumerator.Instance;
System.Data.DataTable table = instance.GetDataSources();

// Display the contents of the table.
DisplayData(table);

Console.WriteLine("Press any key to continue.");
Console.ReadKey();
}

private static void DisplayData(System.Data.DataTable table)
{
foreach (System.Data.DataRow row in table.Rows)
{
foreach (System.Data.DataColumn col in table.Columns)
{
Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);
}
Console.WriteLine("============================");
}
}
}

zjcxc 2007-07-29
  • 打赏
  • 举报
回复
以下控制台应用程序检索所有可见 SQL Server 实例的信息并在控制台窗口中显示该信息。

Visual Basic 复制代码:

==============================================================================
Imports System.Data.Sql

Module Module1
Sub Main()
' Retrieve the enumerator instance and then the data.
Dim instance As SqlDataSourceEnumerator = _
SqlDataSourceEnumerator.Instance
Dim table As System.Data.DataTable = instance.GetDataSources()

' Display the contents of the table.
DisplayData(table)

Console.WriteLine("Press any key to continue.")
Console.ReadKey()
End Sub

Private Sub DisplayData(ByVal table As DataTable)
For Each row As DataRow In table.Rows
For Each col As DataColumn In table.Columns
Console.WriteLine("{0} = {1}", col.ColumnName, row(col))
Next
Console.WriteLine("============================")
Next
End Sub
End Module

zjcxc 2007-07-29
  • 打赏
  • 举报
回复
如果你用 ADO.NET 2.0, 则 MSDN 上就有现成的功能
-----------------------------------------------------------------
SQL Server 2000 和 SQL Server 2005 均允许应用程序在当前的网络中查找 SQL Server 实例。SqlDataSourceEnumerator 类向应用程序开发人员公开此信息,提供包含所有可见服务器的信息的 DataTable。此返回的表包含网络上可用服务器实例的列表(该列表与用户尝试创建新连接时提供的列表匹配),并展开“连接属性”对话框上包含所有可用服务器的下拉列表。显示的结果并非总是完整的。

注意
与大多数 Windows 服务一样,最好使用尽可能少的权限运行 SQL 浏览器服务。有关 SQL 浏览器服务以及如何管理其行为的更多信息,请参见“SQL Server 联机图书”。

hb_gx 2007-07-29
  • 打赏
  • 举报
回复
扫描局域网中所有电脑的1433端口

-----------------------------------

貌似MS就是这样做的,我们局域网内有人的SqlServer改了端口点活动服务器就找不到了

这个效率是很低,你用查询分析器登陆的时候点那个查询活动服务器也是很慢的
青锋-SS 2007-07-29
  • 打赏
  • 举报
回复
俺也有这想法.
肥胖的柠檬 2007-07-29
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20011020/13/331531.html

肥胖的柠檬 2007-07-29
  • 打赏
  • 举报
回复
~不知道几楼了~
bqb 2007-07-29
  • 打赏
  • 举报
回复
1

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧