安装SQL2005的,会有两个服务器吗,一个可以用机器名访问,一个以机器名加实例名访问.
为什么会这样,哪个是默认服务机,默认服务器与实例有什么关系与区别
怎么查询网络上的所有服务器,能把所有的默认服务器和实例都查询出来吗.

解决方案 »

  1.   

    針對實例分別設置:
    程序—Microsoft SQL Server 2005—配置工具—SQL Server 外围应用配置器—服务和连接的外围应用配置器—
    1、MSSQLserver(实例名)—DataBase Engine—远程连接—(设置选项)
    在下方选项
    2、SQL Server Browser—服务(停止时只本机访问)注:
    SQL Server 浏览器程序以服务的形式在服务器上运行。SQL Server 浏览器侦听对 Microsoft SQL Server 资源的传入请求,并提供计算机上安装的 SQL Server 实例的相关信息。SQL Server 浏览器可用于执行下列三种操作:
    浏览可用服务器
    连接到正确的服务器实例
    连接到专用管理员连接 (DAC) 端点
    SQL Server Browser 服务 (sqlbrowser) 为数据库引擎 和 SSAS 的每个实例提供实例名称和版本号。SQL Server 浏览器随 Microsoft SQL Server 2005 一起安装,为该计算机上运行的早期版本的 SQL Server(从 Microsoft SQL Server 7.0 开始)提供此服务
      

  2.   

    2.怎么查询网络上的所有服务器,能把所有的默认服务器和实例都查询出来吗.原则上只能查询局域网中的所有SQL服务器  当然公网也是可以的不过有防火墙 或者禁止远程登录什么的 我有.net 和 delhpi的代码
      

  3.   

    安装SQL2005的,会有两个服务器吗,一个可以用机器名访问,一个以机器名加实例名访问. 
      -- 不是两个服务器,而是一个服务器上的两个不同实例.
    为什么会这样,哪个是默认服务机,默认服务器与实例有什么关系与区别
      -- 这样主要是为了在访问和操作时,针对不同的实例加以区别.
         默认实例和命名实例除共享硬件资源外,没有什么特别的联系.
         详细参考 http://topic.csdn.net/t/20011019/13/330184.html   
    怎么查询网络上的所有服务器,能把所有的默认服务器和实例都查询出来吗.
    -- 枚举局域网的SQL实例代码参考:
    获取局域网内所有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#程序,觉得好用发到这里以便和大家共享一下,其实这个代码我是抄别人过来的,原作者不详,觉得写的好就和大家共享一下了程序实现了用API来得到SqlServer服务器列表的功能,我觉得比用SQLDEMO组件更有意义,代码如下:
    /// <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;
         }
    }
      

  4.   


    我本地有两个实例.
    [dengy\sqlexpress],[dengy] DataTable dataSources = SqlClientFactory.Instance.CreateDataSourceEnumerator().GetDataSources();
    这样能把[dengy\sqlexpress],[取出来,但是我还有一个默认实例[dengy]为什么取不出来
      

  5.   

    SQL SERVER 2005有编程接口SMO,可以通过这个来获取,具体参考联机帮助。