** 需要指出的是,无论下面哪种方式的代码,都需要打开本机的网络共享,否则找不到SQL服务器
** 例一 ***************************************************
* Use MyFll.Fll(下载MyFll)
Set Library To MyFll
lcLocalName = Left(Sys(0),At("#",Sys(0))-2)
lcLocalIP = DomainToIP(lcLocalName)
? '本机名:'+ lcLocalName
? '本机的 IP 为:'+ lcLocalIP
IF lcLocalIP == '127.0.0.1'
   ? '本机现在处于单机状态,未联接网络,或网络适配器停用!'
ENDIF

cStr=GetSqlServer()
nCount=ALines(aServer,cStr,",")   &&切分生成数组
?
? "可连接的 SQL Server 服务器"+Transform(nCount)+"个,分别为:"
For ii=1 to nCount
    ? ii,aServer[ii] &&将名字显示出来
EndFor
Set Library To

** 例二 ****************************************************
* Use SqlDMO.DLL, must install SQLServer or SqlDMO
loSqlDMO=Createobject("SQLDMO.Application")
loSvrs=loSqlDMO.ListAvailableSQLServers()
lnSvrsCount=loSvrs.Count
?
If lnSvrsCount=0
    ? "没有找到可用的 SQL Server 服务器。"
Else
    ? "可连接的 SQL Server 服务器"+Transform(lnSvrsCount)+"个,分别为:"
    For ii=1 TO lnSvrsCount
        ? ii,loSvrs.Item(ii)
    Endfor
Endif
Release loSqlDMO

** 例三 *****************************************************
* Use Windows API, Only VFP9
#Define MAX_PREFERRED_LENGTH        -1
#Define SV_TYPE_SQLSERVER           0x00000004

Declare Long NetServerEnum In netapi32 string ServerName, Long nlevel, ;
        Long @ bufptr, Long prefmaxlen, long @ entriesread, ;
        Long @ totalentries, Long servertype, string domain, Long resume_handle
Declare Long NetApiBufferFree In netapi32 Long bufptr
Declare Long lstrlenW In win32api String @ lpString

If Version(5)<900
   =MessageBox( '需要 vfp 9.0 运行环境!', 16, '错误!' )
Else
   ?
   Store 0 To lnBuff, lnReadNums, lnTotNums
   If 0 == NetServerEnum( Null, 100, @ lnBuff, MAX_PREFERRED_LENGTH, @ lnReadNums, ;
                          @ lnTotNums, SV_TYPE_SQLSERVER, Null, 0) and lnReadNums > 0
      ? "可连接的 SQL Server 服务器"+TRANSFORM(lnReadNums)+"个,分别为:"
      For ii = 1 To lnReadNums
          m.lnAddr = CToBin(Sys(2600, m.lnBuff + (m.ii-1)*8 + 4, 4), 'RS')
          m.lcSrv = Sys(2600, m.lnAddr, 256)
          ? ii,Left(Strconv(m.lcSrv, 6), lstrlenW(m.lcSrv))
      Endfor
   Else
      ? '没有找到可用的 SQL Server 实例。'
   Endif
   If lnBuff > 0
      NetApiBufferFree(lnBuff)
   Endif
Endif
CLEAR DLLS

** 例四 ***********************************************
** 为了与其他例子类似处理,将本例中的Cursor或Table除去了,同时代码也作了相应修改。特注明!
*-----------------------------------------------
* 函数: 获取局域网内所有SqlServer
* 设计: 红雨
* 时间: 2005.04.01
*-----------------------------------------------
?
? NetEnumSqlServer()

Function NetEnumSqlServer()
    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., ',')
                    lcMsg = '可连接的 SQL Server 服务器'+TRANSFORM(m.nCnt)+'个,分别为:' 
                    For m.iCnt = 1 To m.nCnt
                        lcMsg = lcMsg + Chr(13) + Chr(10) + Chr(9) + Transform(m.iCnt) + aServerList[iCnt]
                    Endfor
                Else
                    lcMsg = '没有找到可用的 SQL Server 实例。'
                Endif
            Endif
        Endif
    Endif
    Clear Dlls
    Return lcMsg
Endfunc
*************************************************

** 例五 ************************** 此例与红雨先生的上例近似,也取自网络并作部分修改
?
? GetNetSqlServerApi()

Function GetNetSqlServerApi()
* Use ODBC API
#Define SQL_HANDLE_ENV          1 
#Define SQL_HANDLE_DBC          2 
#Define SQL_NULL_HANDLE         0 
#Define SQL_SUCCESS         0 
#Define SQL_SUCCESS_WITH_INFO       1 
#Define SQL_NEED_DATA           99 
#Define SQL_ERROR           -1 
#Define SQL_INVALID_HANDLE      -2 
#Define SQL_ATTR_ODBC_VERSION       200 
#Define SQL_OV_ODBC3            3 
#Define SQL_NTS             -3 
#Define ENUM_SERVERS_MAX_RET_LENGTH -1  
 
lcDrvName = 'Driver={SQL Server}'

Declare short SQLAllocHandle In odbc32 short HandleType, Long InputHandle, Long @ OutputHandlePtr
Declare short SQLSetEnvAttr In odbc32 long EnvironmentHandle, Long nAttribute, Long ValuePtr, Long StringLength
Declare short SQLBrowseConnect In odbc32 long ConnectionHandle, String InConnectionString, short StringLength1, ;
        String @ OutConnectionString, short BufferLength, short @ StringLength2Ptr
Declare short SQLDisconnect In odbc32 As _SQLDisconnect long ConnectionHandle
Declare short SQLFreeHandle In odbc32 long HandleType, Long Handle

* Allocate the environment handle  
hSQLEnv = 0
lnResult = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, @ hSQLEnv)
If (lnResult == SQL_SUCCESS Or lnResult == SQL_SUCCESS_WITH_INFO)
    * Set the environment attribute to SQL_OV_ODBC3
    lnResult = SQLSetEnvAttr(hSQLEnv, SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3, 0)
    If (lnResult == SQL_SUCCESS Or lnResult == SQL_SUCCESS_WITH_INFO)
        * Allocate a connection handle
        hSQLHdbc = 0
        lnResult = SQLAllocHandle(SQL_HANDLE_DBC, hSQLEnv, @ hSQLHdbc)
        If (lnResult == SQL_SUCCESS Or lnResult == SQL_SUCCESS_WITH_INFO)
            szConnStrOut = SPACE(2048)
            lnLen = 0
            * Call SQLBrowseConnect for additional information  
            lnResult = SQLBrowseConnect(hSQLHdbc, lcDrvName, Len(m.lcDrvName), @ szConnStrOut, 2048, @ lnLen)
            If (lnResult == SQL_SUCCESS Or lnResult == SQL_NEED_DATA)
                 Return ListSqlServersList(Left(szConnStrOut, lnLen))
            Endif
            _SQLDisconnect(hSQLHdbc)  
        Endif  
        SQLFreeHandle(SQL_HANDLE_DBC, hSQLHdbc)  
    Endif  
Endif  
SQLFreeHandle(SQL_HANDLE_ENV, hSQLEnv)
Clear Dlls
Endfunc

Function ListSqlServersList(tcConnectString)  
    Local ii, lcSvrs, lcSvr, lcMsg, laSvrs[1]  
    m.nCnt = Alines(laSvrs, Strextract(tcConnectString, '{', '}'), .T., ',')
    If m.nCnt > 0
        lcMsg = '找到 '+TRANSFORM(m.nCnt)+'个 SQL Server 实例:'
        For m.ii = 1 To m.nCnt
            lcMsg = lcMsg + Chr(13) + Chr(10) + Chr(9) + Transform(m.ii) + laSvrs[m.ii]  
        Endfor  
    Else
        lcMsg = '没有找到可用的 SQL Server 实例。'
    Endif
    Return lcMsg
Endfunc

VFP检测SQL Server的五个实例代码的更多相关文章

  1. SQL Server COM 组件创建实例失败

    SQL Server COM 组件创建实例失败   SQL2008数据库总会出现从 IClassFactory 为 CLSID 为 {17BCA6E8-A95D-497E-B2F9-AF6AA4759 ...

  2. sql server 链接到本地实例出错

    我在使用VS2010测试package的时候,突然发现sql server 链接到本地实例出错,出错信息如下: “ A network-related or instance-specific err ...

  3. 此版本的 SQL Server 不支持用户实例登录标志。该连接将关闭“的解决

    此版本的 SQL Server 不支持用户实例登录标志.该连接将关闭“的解决(转) 2008-10-04 13:31 错误提示:说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息 ...

  4. Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表)

    Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ==== ...

  5. Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表)

    Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUN ...

  6. 检测SQL Server表占用空间大小SQL

    检测SQL Server表占用空间大小SQL,要先选择需要查询的数据库,然后点击执行下面脚本. ),ROWS ),reserved ) ,Data ) ,index_size ) ,Unused ) ...

  7. Openfire 配置连接SQL SERVER(非默认实例)

    安装好Openfire之后,紧接着进行配置. 连接数据库的时候遇上问题. 打算用我本机上的一个SQL SERVER做为数据库.但是,我本机装了几个SQL SERVER实例,现在我打算使用的是那个非默认 ...

  8. 第六篇 SQL Server安全执行上下文和代码签名

    本篇文章是SQL Server安全系列的第六篇,详细内容请参考原文. SQL Server决定主体是否有必要的执行代码权限的根本途径是其执行上下文规则.这一切都可能复杂一个主体有执行代码的权限,但是却 ...

  9. 【译】第六篇 SQL Server安全执行上下文和代码签名

    本篇文章是SQL Server安全系列的第六篇,详细内容请参考原文. SQL Server决定主体是否有必要的执行代码权限的根本途径是其执行上下文规则.这一切都可能复杂一个主体有执行代码的权限,但是却 ...

随机推荐

  1. 【移动测试】你的测试用例中,是否包含App前后台切换

    App前后台切换是我们平时常用的一个操作,比如:按手机的home键将应用置于后台.直接按手机电源键关闭屏幕或者通过最近打开的应用列表切换应用等,由此,我们可以得出结论:当app置于前台时,它的页面对我 ...

  2. 构造分组背包(CF)

    Ivan is a student at Berland State University (BSU). There are n days in Berland week, and each of t ...

  3. 洛谷p1137 模拟退火

    题目链接:https://www.luogu.org/problem/P1337 以x为原点,将力分解成横纵方向的力,每次退火时单独对答案的横纵坐标进行判断是否更新答案 #include<ios ...

  4. Linux初始化Git环境

    第一步:设置Git全局用户名和邮箱 git config --global user.name "你的用户名" git config --global user.email &qu ...

  5. .netcore 3.1高性能微服务架构:webapi规范

    1.1 定义 1.基础接口:单一职责原则,每个接口只负责各自的业务,下接db,通用性强. 2.聚合接口:根据调用方需求聚合基础接口数据,业务性强. 1.2 协议 1. 客户端在通过 API 与后端服务 ...

  6. Set,Multiset,Iterator(迭代器)详解

    Set,Multiset,Iterator(迭代器) Iterator:迭代器 我们可以发现所谓一些数据结构比如说数组和链表,它们都有一些相似的性质.我们看下面两个例子: 数组:定义数组\(int~a ...

  7. Java 使用 UnixSocket 调用 Docker API

    在 Docker 官网查阅 API 调用方式 例如:查询正在运行的容器列表,HTTP 方式如下: $ curl --unix-socket /var/run/docker.sock http:/v1. ...

  8. AI领域有什么职业?怎样才能在AI领域找到工作?

    AI领域是一个很吃香的行业,在这个行业中,很多人都是高薪的,而且有些学生为了以后能够接触到这个行业,都在大学的时候,学习这个专业,那么大家知道AI领域有什么职业吗?下面我们就来给大家讲解一下. 1.算 ...

  9. 正则表达式在c++中的实现

    这个是最基础的解释器,它实现了串联.并联.克林闭包,字符集为除了()|*的ASCII字符,而且不能判断表达式合法,效率还很低,内存利用率低. 它只能判读输入的字符串是否符合表达式. #include& ...

  10. applyColorMap 在OpenCV中对灰度图进行颜色映射,实现数据的色彩化

    什么是色彩映射: 说直白点就是将各种数据映射成颜色信息,例如:温度,高度,压力,密度,湿度,城市拥堵数据等等 色彩化后更加直观表达 在OpenCV里可以使用 Mat im_gray = imread( ...