程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> c# 獲取當前可見的sqlserver 服務以及數據庫

c# 獲取當前可見的sqlserver 服務以及數據庫

編輯:關於SqlServer
步驟: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;}
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved