VFP检测SQL Server的五个实例代码
** 需要指出的是,无论下面哪种方式的代码,都需要打开本机的网络共享,否则找不到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的五个实例代码的更多相关文章
- SQL Server COM 组件创建实例失败
SQL Server COM 组件创建实例失败 SQL2008数据库总会出现从 IClassFactory 为 CLSID 为 {17BCA6E8-A95D-497E-B2F9-AF6AA4759 ...
- sql server 链接到本地实例出错
我在使用VS2010测试package的时候,突然发现sql server 链接到本地实例出错,出错信息如下: “ A network-related or instance-specific err ...
- 此版本的 SQL Server 不支持用户实例登录标志。该连接将关闭“的解决
此版本的 SQL Server 不支持用户实例登录标志.该连接将关闭“的解决(转) 2008-10-04 13:31 错误提示:说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息 ...
- Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表)
Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ==== ...
- Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表)
Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUN ...
- 检测SQL Server表占用空间大小SQL
检测SQL Server表占用空间大小SQL,要先选择需要查询的数据库,然后点击执行下面脚本. ),ROWS ),reserved ) ,Data ) ,index_size ) ,Unused ) ...
- Openfire 配置连接SQL SERVER(非默认实例)
安装好Openfire之后,紧接着进行配置. 连接数据库的时候遇上问题. 打算用我本机上的一个SQL SERVER做为数据库.但是,我本机装了几个SQL SERVER实例,现在我打算使用的是那个非默认 ...
- 第六篇 SQL Server安全执行上下文和代码签名
本篇文章是SQL Server安全系列的第六篇,详细内容请参考原文. SQL Server决定主体是否有必要的执行代码权限的根本途径是其执行上下文规则.这一切都可能复杂一个主体有执行代码的权限,但是却 ...
- 【译】第六篇 SQL Server安全执行上下文和代码签名
本篇文章是SQL Server安全系列的第六篇,详细内容请参考原文. SQL Server决定主体是否有必要的执行代码权限的根本途径是其执行上下文规则.这一切都可能复杂一个主体有执行代码的权限,但是却 ...
随机推荐
- sql if else 语句
IF ELSE 语句IF ELSE 是最基本的编程语句结构之一几乎每一种编程语言都支持这种结构而它在用于对从数据库返回的数据进行检查是非常有用的TRANSACT-SQL 使用IF ELSE的例子如下语 ...
- idea 2019.3 最新版破解教程
背景 最近,idea又被整治了,所以一大批激活码都失效了.我之前已经有2018版的永久激活了,所以非常淡定~,也没打算升级版本.但是,最近发现周围的人都在讨论这个问题.于是,我也找到了2019.3最新 ...
- [洛谷 P5053] [COCI2017-2018#7] Clickbait
Description 下图是一个由容器和管道组成的排水系统.对于这个系统,\(Slavko\) 想知道如果一直向容器1灌水,那么所有容器从空到充满水的顺序. 系统共有 \(K\) 个容器标号为1到 ...
- 【java面试】集合类篇
java中主要的类集合接口如下 Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├Has ...
- 个人第4次作业—Alpha项目测试
这个作业属于哪个课程 课程链接 这个作业要求在哪里 作业要求 团队名称 CTRL_IKUN(团队博客) 这个作业的目标 对非本小组的三个项目进行软件测试 一.测试人员个人信息 学号 201731032 ...
- 使用Rclone和WinFsp挂载FTP为磁盘
介绍 Rclone:是一款的命令行工具,支持在不同对象存储.网盘间同步.上传.下载数据.官网网址:rclone.org WinFsp:是一款Windows平台下的文件系统代理软件(Windows Fi ...
- sqli_labs学习笔记(一)Less-21~Less-37
续上,开门见山 Less-21 Cookie Injection- Error Based- complex - string ( 基于错误的复杂的字符型Cookie注入) 登录后页面 圈出来的地方显 ...
- Kafka系列1:Kafka概况
Kafka系列1:Kafka概况 Kafka是当前分布式系统中最流行的消息中间件之一,凭借着其高吞吐量的设计,在日志收集系统和消息系统的应用场景中深得开发者喜爱.本篇就聊聊Kafka相关的一些知识点. ...
- day05【数组】
day05[数组] 1.数组 概念:是一种容器,可以同时存放多个数据. 特点: 数组是一种引用数据类型 数组当中的多个数据,类型必须统一 数组的长度在程序的运行期间不可改变 初始化:在内存当中创建一个 ...
- Java博客专栏
1. Java23种设计模式 2. JVM虚拟机 3. 设计模式6大原则 4. Java代码性能优化总结 5. 三种代理 6. iText操作PDF 7. 解析XML的4种方式 8. 面向对象思想 9 ...