查找局域网内的SQLServer服务器(实用类)
查找局域网内的SQLServer服务器(实用类)
using System; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace CSFramework.SqlCfg { /// <summary> /// 查找局域网内的SQLServer服务器 /// </summary> 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() { } /// <summary> /// 获取本地网站SQL Server列表 /// </summary> /// <returns></returns> 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) { MessageBox.Show(ex.Message, "Acquire SQL Servier List Error"); 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; } } } // 来源:www.CSFramework.com, C/S结构框架学习网
参考文档:
高级版适合开发运行在局域网和互联网上的程序吗? C#.Net局域网版本自动升级解决方案(原创) 《CS框架局域网版本自动升级解决方案》.doc 用C#获取局域网内所有机器 获取本地网络内所有SQLServer服务器列表 花生壳通过外网远程访问本地SQLServer服务器(原创) SQLServer LinkServer链接服务器:未将服务器配置为用于RPC SQLServer 服务器主体无法在当前安全上下文下访问数据库 阿里云ECS服务器修改SQLServer默认1433端口 提交GIT服务器失败,提示Git failed with a fatal error.Permission denied,.vs/Server/sqlite3/db.lock 如何在Windows服务中安装和部署WCF服务器? SqlServer配置链接服务器LINKSERVER:ODBC连接MySQL数据库 VS运行ASP.NET网站应用程序:“/”应用程序中的服务器错误。分析器错误,未能加载类型"XXX.Global"。 Windows IIS服务器删除过期的SSL证书 [其他类别]InfoPath 网络服务器 v5.8.2-源码下载
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |