** 需要指出的是,无论下面哪种方式的代码,都需要打开本机的网络共享,否则找不到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. 从数组中取出n个不同的数组成子集 y 使 x = Σy

    /**  * 尝试获取arr子集 y  使 x=Σy  * @param {Array} arr   * @param {number} x   * @param {Array} res   */ f ...

  2. Gitlab安装配置管理

    ◆安装Gitlab前系统预配置准备工作1.关闭firewalld防火墙# systemctl stop firewalld# systemctl disable firewalld 2.关闭SELIN ...

  3. 通过Excel表创建sql脚本

    Excel.sql脚本 1)准备好存有数据的excel表格: 这里我们有些小技巧可以让表下面和右边的表格隐藏,在第8行的位置按住“Ctrl+Shift+↓”可以选定下面的空格,然后鼠标右键 隐藏即可, ...

  4. tensorboard网络结构

    一.tensorboard网络结构 import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data ...

  5. MEF sample

    博客里介绍ntier 基于这个框架有一个叫WAF的示例项目. 看 waf(WPF Application Framework)里面这样有句 不是很懂, This page might help you ...

  6. ValidationAttribute特性的截图

  7. NOI4.6 1455:An Easy Problem

    描述 As we known, data stored in the computers is in binary form. The problem we discuss now is about ...

  8. Canny边缘检测算法(基于OpenCV的Java实现)

    目录 Canny边缘检测算法(基于OpenCV的Java实现) 绪论 Canny边缘检测算法的发展历史 Canny边缘检测算法的处理流程 用高斯滤波器平滑图像 彩色RGB图像转换为灰度图像 一维,二维 ...

  9. MAVEN报错Cannot access alimaven / idea data注解不好使

    BUG 记录 报错页面的代码和截图: Cannot access alimaven (maven.aliyun.com/nexus/conte…..... 解决方法: 报错页面的代码和截图: JAR ...

  10. MySQL基础知识清单

    学习大纲(★为重点,√其次) 一.为什么要学习数据库 二.数据库的相关概念 DBMS.DB.SQL 三.数据库存储数据的特点 四.初始MySQL MySQL产品的介绍 MySQL产品的安装 ★ MyS ...