现在的位置: 首页 >> 程序开发 >> C#.NET >> 用API得到局域网中可用SqlServer服务器列表
添加时间:2005-10-30 来源:网教中国 作者:
用API得到局域网中可用SqlServer服务器列表

    无意中找到了以前的一个C#程序,觉得好用发到这里以便和大家共享一下,其实这个代码我是抄别人过来的,原作者不详,觉得写的好就和大家共享一下了程序实现了用API来得到SqlServer服务器列表的功能,我觉得比用SQLDEMO组件更有意义,代码如下:


/// <summary>

/// 获取网内的数据库服务器名称

/// </summary>

public class SqlLocator

{

     [System.Runtime.InteropServices.DllImport("odbc32.dll")]

     private static extern short SQLAllocHandle(short hType, IntPtr inputHandle, out IntPtr outputHandle);

     [System.Runtime.InteropServices.DllImport("odbc32.dll")]

     private static extern short SQLSetEnvAttr(IntPtr henv, int attribute, IntPtr valuePtr, int strLength);

     [System.Runtime.InteropServices.DllImport("odbc32.dll")]

     private static extern short SQLFreeHandle(short hType, IntPtr handle);

     [System.Runtime.InteropServices.DllImport("odbc32.dll",CharSet= System.Runtime.InteropServices.CharSet.Ansi)]

     private static extern short SQLBrowseConnect(IntPtr hconn, System.Text.StringBuilder inString,

         short inStringLength, System.Text.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>

     /// 获取网内的数据库服务器名称,是一个字符串数组。

     /// </summary>

     /// <returns></returns>

     public static string[] GetServers()

     {

         string list = string.Empty;

         IntPtr henv = IntPtr.Zero;

         IntPtr hconn = IntPtr.Zero;

         System.Text.StringBuilder inString = new System.Text.StringBuilder(SQL_DRIVER_STR);

         System.Text.StringBuilder outString = new System.Text.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)



[1] [2] [3]  下一页


上一篇:怎样在你的应用程序中集成Google搜索? 下一篇:C#中使用SendMessage
大部分文章摘自网上,如有侵犯您的权益请与我们联系,我们会第一时间进行处理,谢谢! [ 打印文章 ] [ 关闭窗口 ]
推荐文章
·Snake.Net中的ORM(三)
·Visual C#托管Socket的实现方法(
·对.NET Framework "事件"机制理
·C#锐利体验(3.2)
·在C#中使用COM+实现事务控制
·.NET Remoting编程简介
·全面剖析VB.NET(3)
·微软的远程处理框架.NET Remotin
·C#重点知识详解(一)
·冰雹欲来风满楼--.NET计划初露锋
相关文章
 
最新文章
·数据结构与算法(C#实现)系列---(
·数据结构与算法(C#实现)系列---(
·数据结构与算法(C#实现)系列---(
·ASP.net 验证码(C#)
·Snake.Net中的ORM(三)
·Snake.Net中的ORM(二)
·Snake.Net中的ORM(-)
·用C#生成随机中文汉字验证码的基
·Autodesk官方最新的.NET教程(五
·Autodesk官方最新的.NET教程(四
Google