zoukankan      html  css  js  c++  java
  • 获取Sql服务器列表 (C#)

    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;
    }

    }

    }


  • 相关阅读:
    洛谷P3569 [POI2014]KAR-Cards(线段树)
    洛谷P3295 [SCOI2016]萌萌哒(倍增+并查集)
    GFS分布式文件系统脚本
    源码安装apache脚本
    python如何安装cv2
    从npz文件中读取图片并显示的小例子
    读取npz,并显示图像
    Python中.npz文件的读取
    导出MNIST的数据集
    Keras下载的数据集以及预训练模型保存在哪里
  • 原文地址:https://www.cnblogs.com/gwazy/p/111127.html
Copyright © 2011-2022 走看看