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

    怎么实现这个功能大家肯定早都知道了,放上来是给自己留个备份
    使用:

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

    }

    }

    
    
  • 相关阅读:
    微信小程序
    js
    js
    uni
    uni/微信小程序
    uni/微信小程序
    ES6...扩展运算符(数组或类数组对象)
    微信小程序
    微信小程序
    玩转storm
  • 原文地址:https://www.cnblogs.com/dahuzizyd/p/19569.html
Copyright © 2011-2022 走看看