首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎么自动检查内网的SQL服务器

2012-01-19 
如何自动检查内网的SQL服务器?小弟想做个自动检测内网SQL服务器的小程序.像SQL SERVER企业管理器那样的新

如何自动检查内网的SQL服务器?
小弟想做个自动检测内网SQL服务器的小程序.

像SQL SERVER企业管理器那样的

新建SQL SERVER注册 ,然后在 可用的服务器 下面会列出当前网内的所有的SQL 服务器 .

怎么实现呢?

请教

[解决办法]

SQL code
获取局域网内所有SqlServer 
*-----------------------------------------------
* 函数: 获取局域网内所有SqlServer
* 设计: 红雨
* 时间: 2005.04.01
*-----------------------------------------------
Function NetEnumSqlServer( tcTableName )
  m.tcTableName = Iif(Type([m.tcTableName])=[C], m.tcTableName, [TNetEnumSqlServer])
  Create Cursor (m.tcTableName) ( ServerName C(254) )
  Declare SHORT SQLBrowseConnect In odbc32 Integer ConnectionHandle, String InConnectionString, Integer StringLength1, String  @ OutConnectionString, Integer  BufferLength, Integer @ StringLength2Ptr
  Declare SHORT SQLAllocHandle In odbc32 Integer HandleType, Integer InputHandle, Integer @ OutputHandlePtr
  Declare SHORT SQLFreeHandle In odbc32 Integer HandleType, Integer Handle
  Declare SHORT SQLSetEnvAttr In odbc32 Integer EnvironmentHandle, Integer Attribute, Integer ValuePtr, Integer StringLength

  Local hEnv, hConn, cInString, cOutString, nLenOutString, nCnt, iCnt
  m.nCnt = 0
  m.hEnv = 0
  m.hConn = 0
  m.cInString = "DRIVER=SQL SERVER"
  m.cOutString = Space(2048)
  m.nLenOutString = 0
  Local Array aServerList[1]

  If SQLAllocHandle(1, 0, @hEnv) = 0
    If SQLSetEnvAttr(m.hEnv, 200, 3, 0) = 0
      If SQLAllocHandle(2, m.hEnv, @hConn) = 0
        If SQLBrowseConnect(m.hConn, @cInString, Len(m.cInString), @cOutString, 2048, @nLenOutString) = 99
          m.nCnt = Alines(aServerList, Strextract(m.cOutString, '{', '}'), .T., ',')
          For m.iCnt = 1 To m.nCnt
            Insert Into (m.tcTableName) Values ( aServerList[iCnt] )
          Endfor
        Endif
      Endif
    Endif
  Endif
Endfunc

[解决办法]
C# code
无意中找到了以前的一个C#程序,觉得好用发到这里以便和大家共享一下,其实这个代码我是抄别人过来的,原作者不详,觉得写的好就和大家共享一下了程序实现了用API来得到SqlServer服务器列表的功能,我觉得比用SQLDEMO组件更有意义,代码如下:/// <summary>/// 获取网内的数据库服务器名称/// </summary>public class SqlLocator{     [System.Runtime.InteropServices.DllImport("odbc32.dll")]     private static extern short SQLAllocHandle(short hType, IntPtr inputHandle, 'B'
[解决办法]
没试过,
看看!:)
-----------------
先装一个最新的SP2包,确保SQLDMO.dll是最新的。然后在C#中引用SqlDMO.dll,以下方法将局域网内的可用的SQL server列出到组合框中。
C# code
                  public   long   listSqlservers(ComboBox   servers)                     {                             SQLDMO.Application   sql   =   new   SQLDMO.Application();                                                           SQLDMO.NameList   mynamelist   =   sql.Application.ListAvailableSQLServers();                             long   lCount   =   mynamelist.Count;                             for   (int   i=1;   i   <   lCount   +   1;   i++)                             {                                     string   str   =   mynamelist.Item   (i);                                     if   (str   !=   null)                                             if   (servers.FindString   (str)   ==   -1)                                             {                                                     servers.Items.Add   (str);                                             }                             }                             return   lCount;                     } 


[解决办法]

C# code
 Public Shared Function GetServerSource() As DataTable        Dim mySQL As Sql.SqlDataSourceEnumerator = Sql.SqlDataSourceEnumerator.Instance        Return mySQL.GetDataSources    End Function
[解决办法]
引用DMO就行..
不要告诉我..这个代码..你不会改写成VB.Net

SQL code
引用SQLDMO (COM组件)包含两个基本对象Application、SQLServer(先实例化)Application属性/方法NameList                  保存服务器清单的集合ListAllAvailableServers   取得网络上可用服务器的方法SQLServer属性/方法Connect                  连接SQLServer以便访问数据库LoginSecure              指定用可信任连接连接SQLServerDatabases                指定SQLServer的数据库集合程序段示例int i;SQLDMO.NameList oNames = new SQLDMO.NameList();SQLDMO.Application oSQLApp= new SQLDMO.Application();oNames=oSQLApp.ListAvailableSQLServers();if (oNames.Count==0){  Listbox1.Items.Add("(local)");}for (i=1;i=oNames.Count;i++){  Listbox1.Items.Add(oNames.Item(i));}===============================Object db;SQLDMO.SQLServer osvr=new SQLDMO.SQLServer();osvr.LoginSecure=true;osvr.Connect(strSQLServer);//这个字符串就是上面的listitemforeach (db in osvr.Databases){  Listbox2.Items.Add(db.Name);} 

热点排行
Bad Request.