获取Sql服务器列表 (C#)

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

![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)private void button1_Click_1(object sender, System.EventArgs e)  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)...{  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) string[] servers = DBGrep.SqlLocator.GetServers();  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) foreach ( string s in servers )  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif) ...{  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) this.listBox1.Items.Add(s);  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif) }  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)}  
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)


类的代码  



![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)using System;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;  
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)  
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)namespace DBGrep  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)...{  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) public class SqlLocator  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif) ...{  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) [DllImport("odbc32.dll")]  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) private static extern short SQLAllocHandle(short hType, IntPtr inputHandle, out IntPtr outputHandle);  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) [DllImport("odbc32.dll")]  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) private static extern short SQLSetEnvAttr(IntPtr henv, int attribute, IntPtr valuePtr, int strLength);  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) [DllImport("odbc32.dll")]  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) private static extern short SQLFreeHandle(short hType, IntPtr handle);   
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) [DllImport("odbc32.dll",CharSet=CharSet.Ansi)]  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) private static extern short SQLBrowseConnect(IntPtr hconn, StringBuilder inString,   
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) short inStringLength, StringBuilder outString, short outStringLength,  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) out short outLengthNeeded);  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) private const short SQL_HANDLE_ENV = 1;  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) private const short SQL_HANDLE_DBC = 2;  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) private const int SQL_ATTR_ODBC_VERSION = 200;  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) private const int SQL_OV_ODBC3 = 3;  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) private const short SQL_SUCCESS = 0;  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)   
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) private const short SQL_NEED_DATA = 99;  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) private const short DEFAULT_RESULT_SIZE = 1024;  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) private const string SQL_DRIVER_STR = "DRIVER=SQL SERVER";  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)   
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif) private SqlLocator()...{}  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) public static string[] GetServers()  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif) ...{  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) string[] retval = null;  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) string txt = string.Empty;  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) IntPtr henv = IntPtr.Zero;  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) IntPtr hconn = IntPtr.Zero;  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) StringBuilder inString = new StringBuilder(SQL_DRIVER_STR);  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) StringBuilder outString = new StringBuilder(DEFAULT_RESULT_SIZE);  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) short inStringLength = (short) inString.Length;  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) short lenNeeded = 0;  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) try  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif) ...{  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) if (SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_ENV, henv, out henv))  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif) ...{  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) if (SQL_SUCCESS == SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(IntPtr)SQL_OV_ODBC3,0))  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif) ...{  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) if (SQL_SUCCESS == SQLAllocHandle(SQL_HANDLE_DBC, henv, out hconn))  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif) ...{  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) if (SQL_NEED_DATA == SQLBrowseConnect(hconn, inString, inStringLength, outString,   
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) DEFAULT_RESULT_SIZE, out lenNeeded))  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif) ...{  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) if (DEFAULT_RESULT_SIZE < lenNeeded)  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif) ...{  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) outString.Capacity = lenNeeded;  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) if (SQL_NEED_DATA != SQLBrowseConnect(hconn, inString, inStringLength, outString,   
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) lenNeeded,out lenNeeded))  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif) ...{  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) throw new ApplicationException("Unabled to aquire SQL Servers from ODBC driver.");  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif) }   
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif) }  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) txt = outString.ToString();  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) int start = txt.IndexOf("{") + 1;  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) int len = txt.IndexOf("}") - start;  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) if ((start > 0) && (len > 0))  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif) ...{  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) txt = txt.Substring(start,len);  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif) }  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) else  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif) ...{  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) txt = string.Empty;  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif) }  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif) }   
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif) }  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif) }  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif) }  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif) }  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) catch (Exception ex)  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif) ...{  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) //Throw away any error if we are not in debug mode  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)#if (DEBUG)  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) MessageBox.Show(ex.Message,"Acquire SQL Servier List Error");  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)#endif   
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) txt = string.Empty;  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif) }  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) finally  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif) ...{  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) if (hconn != IntPtr.Zero)  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif) ...{  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) SQLFreeHandle(SQL_HANDLE_DBC,hconn);  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif) }  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) if (henv != IntPtr.Zero)  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif) ...{  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) SQLFreeHandle(SQL_HANDLE_ENV,hconn);  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif) }  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif) }  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)   
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) if (txt.Length > 0)  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif) ...{  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) retval = txt.Split(",".ToCharArray());  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif) }  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)  
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif) return retval;  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif) }  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif) }  
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)}
Published At
Categories with Web编程
Tagged with
comments powered by Disqus