VB 版 (精华区)

发信人: zxfsnow (别怕我伤心), 信区: VB
标  题: VB调用C程序禇动态链接库法?
发信站: 哈工大紫丁香 (2000年06月01日19:08:29 星期四), 转信

发信人: Settler (痕迹), 信区: VB
标  题: VB调用C程序禇动态链接库法?  (转载)
发信站: 饮水思源站 (Sat Oct 24 19:14:02 1998) , 转信

【 以下文字转载自 Automation 讨论区 】
【 原文由 Settler 所发表 】
李承梁 赖寿宏
武汉华中理工大学自控系(邮编:430074)
摘要               
  本文讨论了Visual Basic应用程序访问SQL Server数据的
几种常用的方法,分别说明了每种方法的内部机理并给出了每
种方法的一个简单的实例,最后比较了每种方法的性能和优缺
点。
引言               
    Microsoft Visual Basic(简称VB)作为一种面向对象的可
视化编程工具,具有简单易学的,灵活方便和易于扩充的特点。
而且Microsoft为其提供了与SQL Server通信的API函数集及工
具集。因此它越来越多地用作大型公司数据和客户机—服务器
应用程序的前端。与后端的Microsoft SQL Server相结合,VB
能够提供一个鲁棒的、高性能的客户机—服务器方案。  使用
Visual Basic作为前端开发语言,与SQL Server接口有三种常
用的方法,即:
        1)数据访问对象/Jet;
        2)为ODBC API编程;
        3)使用SQL Server的Visual Basic库
(VBSQL)为DB库API编程本文将讨论这三种VB应用程序管理SQL Server
数据的方法,并比较每种方法的性能和优缺点。
    方法1.数据访问对象/JetVisual Basic支持  Data Access
Objects(DAOs)的子集。DAO的方法虽然不是性能最好的管理客户机
—服务器之间的对话方式,但它确有许多优点。使用DAOs访问 SQL
Server的过程如下:应用程序准备好语句并送至Jet,Jet引擎
(MASJT200.DLL)优化查询,载入驱动程序管理器并与之通讯,驱动
程序管理器(ODBC.DLL)通地调用驱动器(SQLSRVR.DLL)的函数,实
现连接到数据源,翻译并向SQLServer提交SQL语句且返回结果。
下面是一个用DAOs访问SQL Server的VB实例。
        'Form Declarations
        Dim mydb As Database
        Dim mydynaset As Dynaset
        Private Sub Form_Load()
        Set mydb=OpenDatabase("",Fa|se,Fa|se,"ODBC;
                DSN=Myserver;WSID=LCL;DATABASE=sa|es")
        Set mydynaset=mydb CreateDynaset("Select*from Customers")
        End Sub
    上述例子是以非独占、非只读方式打开sales数据库,并检索
Customers表中的所有字段。OpenDatabase函数的最后一个参数是
ODBC连接字符串参数,它指明了Microsoft Access连接到SQL Server
所需要知道的一些内容。其中“DSN”为数据源名,“WSID”为工作站名,
“DATABASE”为所要访问的数据库名。
    方法2.用ODBC API编程
    ODBC(Open Database Connectivity)的思想是访问异种数据库的一种
可移植的方式。与数据资源对话的公用函数组装在一个称为驱动程序管理器
(ODBC.DLL)的动态连接中。应用程序调用驱动程序管理器中的函数,而驱动
程序管理器反过来通过驱动器反过来通来驱动器(SQLSRVR.DLL)把它们送到
服务器中。用ODBC API编程,一般要用到以下一些函数。下面列出了常用的
函数以及它们的功能。
    函数              功能
    SQLALLocEnv       初始化ODBC环境,返回环境句柄
    SQLALLocConnect   为连接句柄分配内存并返回连接句柄
    SQLConnect        连接一个SQL数据资源
    SQLDriverConnect  连接一个SQL数据资源,允许驱动器向用户询问信息
    SQLALLocStmt      为语句句柄分配内存并返回语句句柄
    SQLExecDirect     把SQL语句送到服务器
    SQLFetchAdvances  到结果集的下一行(或第一行)
    SQLGetData        从结果集的特定的一列取回数据
    SQLFreeStmt       释放与语句句柄相关的资源
    SQLDisconnect     切断连接
    SQLFreeConnect    释放与连接句柄相关的资源
    SQLFreeEnv        释放与环境句柄相关的资源
    下面的代码使用上面一些函数先登录到一个服务器数据库,并为随后的
工作设置了语句句柄。
        Global giHEnv As Long
        Global giHDB As Long
        Global giHStmt As Long
        Dim myResult As integer
        Dim myConnection As Srting
        Dim myBuff As String*256
        Dim myBufflen As Integer
        If SQLA||ocEnv(giHEnv)<>SQL_SUCCESS Then
                MsgBox"A||ocation couldn't happen!"
        End if
        if SQL||ocConnect(giHEnv,giHDB)<>SQL_SUCCESS Then
                MsgBox "SQL Server couldn't connect!"
        End if
        myConnection="DSN=myServer;UID=|c|;PWD=;
                APP=ODBCTest;WS|D=LCL;DATABASE=sales"
        myResult=SQLDriverConnect(giHDB,Test,form1.hWnd,
                myConnection.len(myConnection),myBuff,256,
                myBufflen,SQL_DRIVER_COMPLETE_REQUIED)
        myResult=SQLA||ocStmt(giHDS,giHStmt)
        myResult=SQLFreeStmt(giHStmt,SQL_COLSE)
        rsSQL="Select*from Customers Where City="Wuhan""
        myResult=SQLExecDirect(giHStmt,rsSQL,Len(rsSQL))
    方法3.使用VBSQL对DB库API编程
    DB库是SQL Server的本地API,SQL Server的Visual Basic库(VBSQL)为Visual
Basic程序员提供API。从一定意义上说,VBSQL是连接Visual Basic程序到SQL
Server的性能最好最直接的方式。VBSQL包含以下三个文件:
        VBSQL.VBX         包含库函数,具有访问重要的消息和处理错误的能力
        VBSQL.BI          包括所有的常量和变量说明
        VBSQL.HLP Windows 帮助文件,使用VBSQL的指南
    使用VBSQL时,必需将VBSQL.BI加入到Visual Basic工程文件中,并确保VB程序
运行时有VBSQL.VBX文件。一个典型的VBSQL对话中,一般要用到以下这些函数。
        函数                    功能
        SqlInit                 在客户机上装载DB库
        SqlOpenConnection       打开服务器连接,返回连接句柄
        SqlCmd                  在客户机上建立批处理命令
        SqlExec                 向服务器提交批处理命令
        Sqlrexults              把客户机定位在第一条(或下一条)结果集的开端
        SqlNextRow              驱动每个结果集的行之间的循环
        SqlData                 访问一个特定列的数据
        SqlClose                切断特定的连接
        SqlExit                 切断所有找开的连接
        SqlWinExit              卸下DB库
    一般的DB库API编程的过程是这样的:先通过调用SqlInit对DB库进行初始化,
再调用SqlConnection打开一个连接,然后就可做一些工作。下面的代码是一个初
始化DB库并登录到服务器的通用例程。
        Private Sub |nitia|izeApp|ication()
        DBL|B-VERS|ON=SqlInit()
        if DBL|B_VERS|ON=""Then
                MsgBox"Could not initia|ize DBL|B!Exit app|ication.",
                        MB_|CONEXCLAMAT|ON End
        End if
        End Sub

        Private Function LoginToServer() As integer
        loginToServer=SUCCEED
        Status%=SqlSetloginTime%(loginTimeOut)
        if giSq|Conn<>0 Then
                SqlClose(giSqlConn)     '关闭已打开的连接
                giSqlConn=SqlOpenConnection(gsServerName,gsLoginlD,
                        gsPassword,Progr amName,ProgramName)
                if giSq|Conn<>o Then liresult=Sq|Use(giSq|Conn,"Sales")
                        Else LogintoServer=FAlL
        End if
        End Function
    性能比较
    以上三种访问SQL Server的方法各有各的特点。DAOs方法是基于对象的,
因而便于使用,但是它从Visual Basic到SQL Server的最慢的方式。ODBC API
和VBSQL方法从本质上讲是基于程序的。ODBC API方法通用性好,允许最强的
互操作性,编程简单,但速度慢于VBSQL方法。VBSQL方法通过VBSQL控件,提
供了重要的SQL Server前端应用程序所需的灵活性、强大功能和良好性能。它
具有真正的事件驱动及错误处理能力,完全支持异步处理、游标和计算列等。
这些都是VBSQL方法超出其它方法的优势,但其编程稍复杂。至于实际使用哪
一种接口方式,在很大程度上依赖于用户的应用程序的具体情况而定。

  
--

 以科计为本,以产业报国!
  超越自我,飞跃无限!
  

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.235.249]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.940毫秒