步驟:1 . 引用 microsoft SQLDMO object liabiry
2. 添加如下代碼:
//get all available SQL Servers
List<string> server = new List<string>();
SQLDMO.Application sqlApp = new SQLDMO.ApplicationClass();
SQLDMO.NameList sqlServers = sqlApp.ListAvailableSQLServers();
for (int i = 1; i < sqlServers.Count; i++)
{
object srv = sqlServers.Item(i);
if (srv != null)
{
server.Add(srv.ToString());
}
}
List<string> Database = new List<string>();
foreach (string everyServer in server)
{
SQLDMO.SQLServer serv = new SQLDMO.SQLServerClass();
serv.Connect(everyServer, "sa", "123"); //get all available databases from an SQL Server foreach (SQLDMO.Database db in serv.Databases)
{
if (db.Name != null)
Database.Add(db.Name);
}}//Get all Stored procedures - tables are in the Tables collection, views are in the VIEws collection
SQLDMO.SQLServer srv = new SQLDMO.SQLServerClass();
srv.Connect(this.cboServers.SelectedItem.ToString(),this.txtUser.Text,this.txtPassWord.Text);
for(int i=0;i<srv.Databases.Count;i++)
{
if(srv.Databases.Item(i+1,"dbo").Name == this.cboDatabase.SelectedItem.ToString())
{
SQLDMO._Database db= srv.Databases.Item(i+1,"dbo");
this.lstObjects.Items.Clear();
for(int j=0;j<db.StoredProcedures.Count;j++)
{
this.lstObjects.Items.Add(db.StoredProcedures.Item(j+1,"dbo").Name);
}
break;
}
以下是調用Windows的api獲取sql服務名稱的方法:/// <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;}
}