c#如何监测本机是否安装Sql Server 2000,并且......

junandjun 2003-10-17 02:15:27
各位高手好:
请问如何监测本机和局域网内的某个机器是否安装了sql server 2000,并得到sql server 2000上的数据库名、表名及表的字段,谢谢。
...全文
54 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
westseason 2003-10-22
  • 打赏
  • 举报
回复
提示在SQLDMO.NameList nl = app.ListAvailableSQLServers();列表所有SQL Server实例的时候com类的QueryInterface出错。
如何解决?
amoxicillin1030 2003-10-22
  • 打赏
  • 举报
回复
添加引用->选项卡中选COM->浏览
->选择c:/Program files/Microsoftsqlserver/80/Tools/Binn/sqldmo.dll然后点击确定即可
这样你就可以在程序中用USING引用它了
qqqdong 2003-10-22
  • 打赏
  • 举报
回复

try
{
SQLDMO.Application app = new SQLDMO.ApplicationClass();
SQLDMO.NameList nl = app.ListAvailableSQLServers();
this.treeView1.Nodes.Clear();
for ( int i = 0; i < nl.Count; i++ )
{
TreeNode svrNode = new TreeNode(nl.Item(i));
this.treeView1.Nodes.Add(svrNode);
SQLDMO.SQLServer2 svr = new SQLServer2Class();
svr.Connect(nl.Item(i),"sa","123456");
foreach ( SQLDMO._Database db in svr.Databases )
{
TreeNode dbNode = new TreeNode(db.Name);
svrNode.Nodes.Add(dbNode);
foreach ( SQLDMO.Table tb in db.Tables )
{
dbNode.Nodes.Add(tb.Name);
}
}
}
}
catch ( Exception error )
{
MessageBox.Show(error.Message);
}
zytp 2003-10-22
  • 打赏
  • 举报
回复
awen@patching.net

1 原理简述

对于SQL Server2000来说,打开SQL Server客户端准备连接,当拉开服务器列表的时候,

整个局域网所有的SQL Server服务器都被列出来了。这是为什么呢? 原理如下:
从我自己的机器(192.168.0.1)上从1434端口广播(192.168.0.255)了这个UDP包,然后,

整个局域网中的SQL Server服务器都开始响应这个UDP数据包,所有这些
都是明文传输的,我们可以很容易探测一个IP地址的1434端口,获得该IP地址上运行的

SQL Server的相关信息。这些信息包括:主机名称、实例名称、版本、管道名称以及使

用的端口等。这个端口是微软自己使用,而且不象默认的1433端口那样可以改变,1434

是不能改变的,

2
下面是一个利用1434进行探测的c#程序,核心代码如下(很简单,呵呵) :
using System;
using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Threading;


namespace ConsoleApplication3
{

class Class1
{
//创建一个UDPCLIENT实例
private static UdpClient m_Client;

//LISTEN用来获取返回的信息
public static string Listen(string hostip)
{
string HostIP = hostip;
IPAddress thisIP = IPAddress.Parse(HostIP);
IPEndPoint host = new IPEndPoint(thisIP,1434);
byte [] data = m_Client.Receive(ref host);
Encoding ASCII = Encoding.ASCII;
String strData = ASCII.GetString(data);
return strData;

}
//SEND
public static void Send(string hostip)
{
string HostIP = hostip;
byte [] buffer = {02};
//02为要发送的数据,只有02、03、04有回应
int ecode = m_Client.Send(buffer,1,HostIP,1434);
//ecode用来返回是否成功发送
if(ecode <= 0)
{
Console.WriteLine("发送时出错:" + ecode);

}

}
//对返回的信息的简单的处理
public static void OutputInfo(string strdata)
{
string str = strdata;
//str.le
char [] that = {‘;‘,‘;‘};
string [] strofthis =str.Split(that);
//int i= 0 ;
for(int i=0;i<strofthis.GetUpperBound(0) ;i++)
{

Console.Write(strofthis);
Console.Write(‘\n‘);
}

}
//输入IP
public static string InputHostIP()
{
Console.Write("enter the ip you want to scan:\n\n";
string hostip =Console.ReadLine();
Console.Write(‘\n‘);
return hostip;
}
//EXIT
public static void Exit()
{
Console.WriteLine("if you want to exit ,just input 1\n";
int a = Console.Read();
if(a!= 1)
{
Console.WriteLine("if you want to exit ,just input 1\n";
Console.Read();
}
else
{
}
}

[STAThread]

static void Main(string[] args)
{
string HostIP;
HostIP = InputHostIP();
Console.WriteLine("Begin to send udp to the host";
m_Client = new UdpClient();
Send(HostIP);
string strData=Listen(HostIP);
OutputInfo(strData);
Exit();

}
}
}

3一个典型的返回的信息

ServerName;AWEN;
InstanceName;AWEN;
IsClustered;No;
Version;8.00.194;
tcp;1044; (TCP的端口,可见就算改了端口也是很容易找到的)
np;\\AWEN\pipe\MSSQL$XHT310\sql\query;
junandjun 2003-10-22
  • 打赏
  • 举报
回复
you_lone(诚轩人)、gshope(gshope)怎么找呀,不懂。请指教!!!
you_lone 2003-10-18
  • 打赏
  • 举报
回复
如果没有安装SQL的话,有怎么会有SQLDML.DLL?还是查注册表可行。
wolve 2003-10-17
  • 打赏
  • 举报
回复
使用sqldom,你直接在sqlserver中文档中搜就行了,它的dll位于%sqlserverroot%的\80\Tools\Binn下,在vs下直接作了com对象添加到项目中就可以直接使用
junandjun 2003-10-17
  • 打赏
  • 举报
回复
请问brightheroes(太菜了,请原谅)SQLDML.DLL没收到资料呀,能介绍两个吗?
junandjun 2003-10-17
  • 打赏
  • 举报
回复
请问brightheroes(太菜了,请原谅)SQLDML.DLL是C#带的吗?怎么用?
brightheroes 2003-10-17
  • 打赏
  • 举报
回复
引用SQLDML.DLL
这方面的帖子很多
搜索一下
junandjun 2003-10-17
  • 打赏
  • 举报
回复
没有别的什么办法吗?
gshope 2003-10-17
  • 打赏
  • 举报
回复
本机的话可以检查注册表,其它机器恐怕就不可以了。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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