扫局域网sqlserver
来源:互联网 发布:云计算上市公司 编辑:程序博客网 时间:2024/04/23 23:29
使用:
private void button1_Click_1(object sender, System.EventArgs e)
{
string[] servers = DBGrep.SqlLocator.GetServers();
foreach ( string s in servers )
{
this.listBox1.Items.Add(s);
}
}
类的代码
using System;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace DBGrep
{
public class SqlLocator
{
[DllImport("odbc32.dll")]
private static extern short SQLAllocHandle(short hType, IntPtr inputHandle, out IntPtr outputHandle);
[DllImport("odbc32.dll")]
private static extern short SQLSetEnvAttr(IntPtr henv, int attribute, IntPtr valuePtr, int strLength);
[DllImport("odbc32.dll")]
private static extern short SQLFreeHandle(short hType, IntPtr handle);
[DllImport("odbc32.dll",CharSet=CharSet.Ansi)]
private static extern short SQLBrowseConnect(IntPtr hconn, StringBuilder inString,
short inStringLength, StringBuilder outString, short outStringLength,
out short outLengthNeeded);
private const short SQL_HANDLE_ENV = 1;
private const short SQL_HANDLE_DBC = 2;
private const int SQL_ATTR_ODBC_VERSION = 200;
private const int SQL_OV_ODBC3 = 3;
private const short SQL_SUCCESS = 0;
private const short SQL_NEED_DATA = 99;
private const short DEFAULT_RESULT_SIZE = 1024;
private const string SQL_DRIVER_STR = "DRIVER=SQL SERVER";
private SqlLocator(){}
public static string[] GetServers()
{
string[] retval = null;
string txt = string.Empty;
IntPtr henv = IntPtr.Zero;
IntPtr hconn = IntPtr.Zero;
StringBuilder inString = new StringBuilder(SQL_DRIVER_STR);
StringBuilder outString = new StringBuilder(DEFAULT_RESULT_SIZE);
short inStringLength = (short) inString.Length;
short lenNeeded = 0;
try
{
if (SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_ENV, henv, out henv))
{
if (SQL_SUCCESS == SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(IntPtr)SQL_OV_ODBC3,0))
{
if (SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_DBC, henv, out hconn))
{
if (SQL_NEED_DATA == SQLBrowseConnect(hconn, inString, inStringLength, outString,
DEFAULT_RESULT_SIZE, out lenNeeded))
{
if (DEFAULT_RESULT_SIZE < lenNeeded)
{
outString.Capacity = lenNeeded;
if (SQL_NEED_DATA != SQLBrowseConnect(hconn, inString, inStringLength, outString,
lenNeeded,out lenNeeded))
{
throw new ApplicationException("Unabled to aquire SQL Servers from ODBC driver.");
}
}
txt = outString.ToString();
int start = txt.IndexOf("{") + 1;
int len = txt.IndexOf("}") - start;
if ((start > 0) && (len > 0))
{
txt = txt.Substring(start,len);
}
else
{
txt = string.Empty;
}
}
}
}
}
}
catch (Exception ex)
{
//Throw away any error if we are not in debug mode
#if (DEBUG)
MessageBox.Show(ex.Message,"Acquire SQL Servier List Error");
#endif
txt = string.Empty;
}
finally
{
if (hconn != IntPtr.Zero)
{
SQLFreeHandle(SQL_HANDLE_DBC,hconn);
}
if (henv != IntPtr.Zero)
{
SQLFreeHandle(SQL_HANDLE_ENV,hconn);
}
}
if (txt.Length > 0)
{
retval = txt.Split(",".ToCharArray());
}
return retval;
}
}
}
- 扫局域网sqlserver
- 局域网SqlServer无法访问的一种解决办法
- 局域网内两sqlserver数据库数据导入
- sqlserver 2005局域网连接不上 解决
- Sqlserver 2008 局域网异机备份方法
- sqlserver局域网内两个服务器互相访问
- SqlServer 局域网内不能连接对方数据库?
- 无法连接局域网中的sqlserver数据库
- 用API得到局域网中可用SqlServer服务器列表
- 在局域网内搜索可用的SQLSERVER服务器
- (轉)用API得到局域网中可用SqlServer服务器列表
- C#用API得到局域网中可用的SqlServer列表
- 用API得到局域网中可用SqlServer服务器列表
- 查找局域网内sqlserver不能连接的原因
- VB6通过API函数获得局域网SQLserver服务器列表
- 解析c#得到局域网内所有sqlserver数据库实例
- 用API得到局域网中可用SqlServer服务器列表
- ArcGIS连接局域网另一台电脑上的SQLServer数据库
- 使不支持中文URL的JSP服务器支持中文URL(如Tomcat)
- bstr error LNK2019: 无法解析的外部符号 "char * __stdcall _com_util::ConvertBSTRToString(wchar_t *)" 的解决办法
- NET下几种动态生成代码方式比较
- 随拍杂记
- 遍历ArrayList易犯错误
- 扫局域网sqlserver
- 注册热键!
- 元编程技术和动态编译
- 使用C#调用外部Ping命令获取网络连接情况
- 编程使用WMI 控制连接属性
- 属性类在开发中的灵活运用
- C#实现动态灵活调用业务方法的机制
- PHP学习技巧总结乱码显示问题,register_global为On的时候,图片上传数据库
- Novell 在台发表全系列 Linux 产品与伙伴认证计划