国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

用API得到局域網中可用SqlServer服務器列表

2019-11-18 19:24:48
字體:
來源:轉載
供稿:網友

    無意中找到了以前的一個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)

                                 {

                                     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.");

                                     }   

                                 }

                                 list = outString.ToString();

                                 int start = list.IndexOf("{") + 1;

                                 int len = list.IndexOf("}") - start;

                                 if ((start > 0) && (len > 0))

                                 {

                                     list = list.Substring(start,len);

                                 }

                                 else

                                 {

                                     list = string.Empty;

                                 }

                            }                          

                        }

                   }

              }

         }

         catch

         {

              list = string.Empty;

         }

         finally

         {

              if (hconn != IntPtr.Zero)

              {

                   SQLFreeHandle(SQL_HANDLE_DBC,hconn);

              }

              if (henv != IntPtr.Zero)

              {

                   SQLFreeHandle(SQL_HANDLE_ENV,hconn);

              }

         }

 

         string[] array = null;

 

         if (list.Length > 0)

         {

              array = list.Split(',');

         }

 

         return array;

     }

}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 资源县| 彰武县| 万安县| 汕尾市| 色达县| 昌乐县| 策勒县| 龙井市| 磐安县| 衡南县| 渭源县| 突泉县| 清水河县| 吉木萨尔县| 连州市| 上饶县| 尉犁县| 宣汉县| 庆安县| 定陶县| 乌兰察布市| 龙胜| 蓝山县| 综艺| 浦江县| 潜山县| 罗山县| 万州区| 炉霍县| 增城市| 靖江市| 海宁市| 阳原县| 崇信县| 双峰县| 广南县| 尖扎县| 云浮市| 五莲县| 灌阳县| 溧水县|