网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.全面剖析Oracle数据库中的分区功.
.如何实现取出文件中特定的列内容.
.转载:如何有效的利用数据字典.
.Oracle专家高级编程学习笔记( 二).
.索引性能优化实例.
.详细解述oracle数据库九个基本操.
.ORACLE问题,每天10问(五).
.Oracle網站上的每周一帖(Tip for.
.Oracle中提取和存储数据库对象的.
.Oracle高级安全性.
.用最简单的方法复制或迁移Oracle.
.甲骨文获中国最佳IT供应链解决方.
.VB+Oracle 9i如何构建开发和运行.
.SQL Server和Oracle的常用函数对.
.用Linux+IPChains代替Windows+.
.MySQL5、PostgreSQL8和Oracle10g.
.Oracle LogMiner终结版.
.关系型数据库:理论背后的灵感.
.ORACLE 9.2.0.4 PATCHES 安装!.
.oracle9i在Red Hat Linux7.3上的.

ODBC API常用函数诠释

发表日期:2008-2-9


 
ODBC API常用函数诠释
记得kony曾经在我的这个坛子上转过一个帖子,解释使用ODBC数据源来连接数据库进行数据库操作速度慢的原因,同时那个帖子也提出了提高ODBC数据源连接数据库进行数据库操作速度的两个办法,一个是利用Visiual Basic中的RDO组件, 一个就是直接调用odbc api函数进行相关数据库操作,应答应过这里的弟弟妹妹们写点关于ODBC API函数方面的东东,所以只能赶鸭子上架了;
      以下为ODBC API的常用十四个函数,先列出在PowerBuilder中外部函数引用声明:
     function integer SQLAllocEnv(ref long phenv) library "odbc32.dll"
     function integer SQLFreeEnv(long henv) library "odbc32.dll"
     function integer SQLDataSources(long henv,int fdirection,ref string szdsn,&
integer cbdsnmax,ref integer pcbdsn,ref string szdescription,integer cbdescriptionmax,ref integer pcbdescription)library "odbc32.dll"
     function integer SQLAllocConnect(long henv,ref long hdbc)library "odbc32.dll"
     function integer SQLConnect (long hstmt,ref string szdsn,integer dsnlen,ref string
szuid,integer uidlen,ref string szpwd,integer pwdlen) library "odbc32.dll"
     function integer SQLDisconnect (long hdbc) library "odbc32.dll"
     function integer SQLAllocStmt(long hdbc,ref long hstmt)library "odbc32.dll"
     function integer SQLTables(long hstmt,ref string sztablequalifier,integer tablequalifierlen,ref string szowner,integer owerlen,ref string szname,integer namelen,
ref string sztype,integer typelen)library "odbc32.dll"
     function integer SQLColumns(long hstmt,ref string sztablequalifier,integer tablequalifierlen,ref string szowner,integer owerlen,ref string szname,integer namelen,
ref string sztype,integer typelen)library "odbc32.dll"
     function integer SQLBindCol(long hstmt,integer colnum,integer datatype,ref string name,long maxlen,ref long actlen) library "odbc32.dll"
     function integer SQLFetch(long hstmt)library "odbc32.dll"
     function integer SQLError(long lenv,long hdbc,long hstmt,ref string sqlstate,ref long nativeerror,ref string errormsg,integer errormsgmax,ref integer errormsglen)library "odbc32.dll"
     function integer SQLFreeStmt(long hstmt,integer Options)library "odbc32.dll"
1、function integer SQLAllocEnv(ref long phenv) library "odbc32.dll"
    参数:ref long phenv 引用传递的long类型参数,保存该函数返回的OBDC环境的句柄。
  存放在phenv中的值成为以后OBDC API函数调用的唯一标识符。
  返回值:integer 成功时,返回0,失败返回值小于0。
  函数功能:获取ODBC环境句柄。
2、function integer SQLAllocStmt(long hdbc,ref long hstmt)library "odbc32.dll"
    参数:long hdbc ODBC环境的句柄。
        Ref long hstmt 保存SQL语句句柄。
  返回值:integer ,成功时,返回0,失败返回值小于0。
  函数功能:获取SQL语句句柄。
3、function integer SQLConnect (long hstmt,ref string szdsn,integer dsnlen,ref string szuid,integer uidlen,
ref string szpwd,integer pwdlen) library "odbc32.dll"
参数:long hstmt ,调用SQLAllocStmt()函数获取的句柄。
      Ref string szdsn,ODBC数据源名。
      Integer dsnlen ,ODBC 数据源名的长度。
      Ref string szuid ,用户帐号。
      Integer uidlen ,用户帐号长度。
      Ref string szpwd ,用户口令。
      Ref integer pwdlen,用户口令长度。
返回值:integer ,成功时,返回值大于0,失败返回值小于0。
函数功能:连接ODBC数据源,并返回连接句柄。
4、 function integer SQLDisconnect (long hdbc) library "odbc32.dll"
参数:long hdbc 连接句柄。
返回值:integer ,成功时,返回0,失败返回值小于0。
函数功能:断开连接ODBC数据源。
5、 function integer SQLTables(long hstmt,ref string sztablequalifier,integer tablequalifierlen,ref string szowner,integer owerlen,ref string szname,integer namelen,ref string sztype,integer typelen)library "odbc32.dll"
参数:long hstmt SQL语句句柄 
   ref string sztablequalifier 表的qualifier名。
integer tablequalifierlen 表的qualifier名的长度。
ref string szowner 表的所有者名。
integer owerlen 表的所有者名长度。
ref string szname 表名。
integer namelen 表名长度。
ref string sztype 表的类型名。
integer typelen 表的类型名长度。
返回值:integer ,成功时,返回0,失败返回值小于0。
函数功能:获取表的信息。
6、 function integer SQLColumns(long hstmt,ref string sztablequalifier,integer tablequalifierlen,ref string szowner,integer owerlen,ref string szname,integer namelen, ref string sztype,integer typelen)library "odbc32.dll"
参数:long hstmt SQL语句句柄 
   ref string sztablequalifier 表的qualifier名。
integer tablequalifierlen 表的qualifier名的长度。
ref string szowner 表的所有者名。
integer owerlen 表的所有者名长度。
ref string szname 表名。
integer namelen 表名长度。
ref string sztype 表的类型名。
integer typelen 表的类型名长度。
返回值:integer ,成功时,返回0,失败返回值小于0。
函数功能:获取指定表的列信息。  
7、Function integer SQLBindCol(long hstmt,integer colnum,integer datatype,ref string name,long maxlen,
ref long actlen) library "odbc32.dll"
参数:long hstmt SQL语句句柄 
integer colnum 1-5(是否有资格,拥有者名字、类型、注释)。
integer datatype 1-8,12,99。
ref string name 程序字符串变量。
long maxlen 可变。
ref long actlen 可变。
返回值:integer ,成功时,返回0,失败返回值小于0。
函数功能:绑定结果集。   
8、function integer SQLFetch(long hstmt)library "odbc32.dll"
参数:long hstmt SQL语句句柄 
返回值:integer ,成功时,返回0,失败返回值小于0。
函数功能:绑定结果集。  
9、function integer SQLError(long lenv,long hdbc,long hstmt,ref string sqlstate,ref long nativeerror,ref string errormsg,integer errormsgmax,ref integer errormsglen)library "odbc32.dll"
参数:long lenv ODBC 环境句柄
long hdbc 连接句柄
long hstmt sql语句句柄
ref string sqlstate 用于接受包含sql错误标识的字符串
ref long nativeerror用于接受包含sql错误标识码
ref string errormsg用于接受包含sql错误信息的字符串
integer errormsgmax 函数返回的最多字符数
ref integer errormsglen函数返回的实际字符数
返回值:integer ,成功时,返回0,失败返回值小于0。
函数功能:返回调用ODBC API函数错误。
10、function integer SQLFreeEnv(long henv) library "odbc32.dll"
参数:long lenv ODBC 环境句柄
返回值:integer ,成功时,返回0,失败返回值小于0。
函数功能:释放ODBC环境句柄。   
11、function integer SQLFreeStmt(long hstmt,integer Options)library "odbc32.dll"
参数:long hstmt SQL语句句柄。
      integer Options 相关选项。
返回值:integer ,成功时,返回0,失败返回值小于0。
函数功能:释放SQL语句句柄。
12、function integer SQLDataSources(long henv,int fdirection,ref string szdsn, integer cbdsnmax,ref integer pcbdsn,ref string szdescription,integer cbdescriptionmax,ref integer pcbdescription)library "odbc32.dll"
参数:long henv ODBC数据源环境句柄。     
      int fdirection 方向标志 1(下一个),2(第一个),3(最后一个),4(前一个)
      ref string szdsn 数据源名称
integer cbdsnmax数据源名称的最大长度
ref integer pcbdsn数据源名称的实际长度
ref string szdescription 数据源描述名称
integer cbdescriptionmax 数据源描述字符串的最大长度
ref integer pcbdescription数据源描述字符串的实际长度
    返回值:integer ,成功时,返回0,失败返回值小于0。
函数功能:释放SQL语句句柄。
13、function integer SQLAllocConnect(long henv,ref long hdbc)library "odbc32.dll"
参数:long henv ODBC数据源环境句柄。     
ref long hdbc 保存ODBC连接句柄。
返回值:integer ,成功时,返回0,失败返回值小于0。
函数功能:获取ODBC连接句柄。
-:)上面总算将列出的几个ODBC API函数描述完,等有时间结合具体例子来说明如何利用ODBC API函数访问数据库了-:)
  例程:
定义实例变量:
protected:
long henv//sql 环境句柄
long hstmt//sql语句句柄
long hdbc//sql 连接句柄
定义句柄外部函数引用:

function integer SQLAllocEnv(ref long phenv) library "odbc32.dll"
     function integer SQLFreeEnv(long henv) library "odbc32.dll"
     function integer SQLDataSources(long henv,int fdirection,ref string szdsn,&
integer cbdsnmax,ref integer pcbdsn,ref string szdescription,integer cbdescriptionmax,ref integer pcbdescription)library "odbc32.dll"
     function integer SQLAllocConnect(long henv,ref long hdbc)library "odbc32.dll"
     function integer SQLConnect (long hstmt,ref string szdsn,integer dsnlen,ref string
szuid,integer uidlen,ref string szpwd,integer pwdlen) library "odbc32.dll"
     function integer SQLDisconnect (long hdbc) library "odbc32.dll"
     function integer SQLAllocStmt(long hdbc,ref long hstmt)library "odbc32.dll"
     function integer SQLTables(long hstmt,ref string sztablequalifier,integer tablequalifierlen,ref string szowner,integer owerlen,ref string szname,integer namelen,
ref string sztype,integer typelen)library "odbc32.dll"
     function integer SQLColumns(long hstmt,ref string sztablequalifier,integer tablequalifierlen,ref string szowner,integer owerlen,ref string szname,integer namelen,
ref string sztype,integer typelen)library "odbc32.dll"
     function integer SQLBindCol(long hstmt,integer colnum,integer datatype,ref string name,long maxlen,ref long actlen) library "odbc32.dll"
     function integer SQLFetch(long hstmt)library "odbc32.dll"
     function integer SQLError(long lenv,long hdbc,long hstmt,ref string sqlstate,ref long nativeerror,ref string errormsg,integer errormsgmax,ref integer errormsglen)library "odbc32.dll"
     function integer SQLFreeStmt(long hstmt,integer Options)library "odbc32.dll"
声明一个函数wf_sqlerror()
代码如下:
string ls_sqlstate,ls_errormsg
integer li_errormsgmax,li_ret
long nativeerror
ls_errormsg=space(255)
ls_sqlstate=space(255)
li_ret=sqlerror(henv,hdbc,hstmt,ls_sqlstate,li_nativeerror,ls_errormsg,255,li_errormsgmax)
messagebox("ODBC:"+ls_sqlstate,ls_errormsg)
return
窗口的open 
事件,写入如下代码:
string ls_dsn,ls_description
integer li_direction,li_dsnmax,li_dsn_len
integer li_descriptionmax,li_description_len,li_retval
ls_dsn=space(255)
li_dsnmax=len(li_dsn)
ls_description=space(255)
li_descriptionmax=len(ls_description)
if sqlallocenv(henv)=-1 then
wf_sqlerror()
else
li_driection=1
do while sqldatasources(henv,li_direction,ls_dsn,li_dsnmax,li_dsn_len,ls_description,li_descriptionmax,li_description_len)=0
lb_datasources.additem(ls_dsn0
loop
end if
窗口的close事件中写入如下代码:
sqldisconnect(hdbc)
sqlfreeenv(henv)
在cb_connect按钮的cliked事件中写入如下的代码:
integer li_ret
string ls_dsn,ls_uid,ls_pwd
string ls_qualifer,ls_owner,ls_name,ls_type,ls_table
long ll_len
ls_dsn=lb_datasources.selecteditem()
ls_uid=sle_uid.text
ls_pwd=sle_pwd.text
li_ret=sqlallocconnect(henv,hdbc)
if li_ret<0 then
   wf_sqlerror()
else
   li_ret=sqlconnect(hdbc,ls_dsn,len(ls_dsn),ls_uid,len(ls_uid),ls_pwd,len(ls_pwd))
   if li_ret<0 then
       wf_sqlerror()
   else
       li_ret=sqlallocstmt(hdbc,hstmt)
       if li_ret<0 then
            wf_sqlerror()
       else
           ls_type="’TABLE’,’VIEW’"
           if cbx_systemtables.checked then
                ls_type=ls_type+",’SYSTEM TABLE ’"
          end if
          li_ret=SQLTABLES(hstmt,ls_qualifier,len(ls_qualifier),ls_owner,len(ls_owner),ls_name,len(ls_name),ls_type,len(ls_type))
         if li_ret<0 then
               wf_sqlerror()
         else
              ls_table=space(255)
              ll_len=255
             sqlbincol(hstmt,3,1,ls_table,ll_len,ll_en)
             lb_tables.setredraw(false)
    
         do while sqlfetch(hstmt)=0 
                  lb_tables.additem(ls_table)
            loop
            lb_tables.setredraw(true)
            li_ret=sqlfreestmt(hstmt,0)
      end if
  end if
end if
end if
this.enabled=false
this.default=false
cbx_systemtables.enabled=false
在lb_datasources的selectionchanged事件中写入如下代码:
sle_uid.text=""
sle_pwd.text=""
sqldisconnect(hdbc)
cbx_systemtables.enabled=true
cb_connect.enabled=true
lb_columns.reset()
lb_tables.reset()
sle_uid.setfocus()
cb_connect.default=true
在lb_tables的selectionchanged事件中写入如下代码:
integer li_ret,li_len
string ls_qualifier,ls_owner,ls_name,ls_column,ls_colname,ls_type
long ll_maxlen
lb_columns.reset()
ls_qualifier=space(255)
ls_owner=space(255)
ls_column=space(255)
ls_colname=space(255)
ls_type=space(255)
ls_name=space(255)
ls_name=this.selecteditem()
li_ret=sqlcolumns(hstmt,ls_quanlifier,0,ls_owner,0,ls_name,len(ls_name),ls_column,0)
if li_ret<0 then
      wf_sqlerror()
else
    ls_colname=space(255)
    ls_type=space(255)
    ll_maxlen=255
    sqlbindcol(hstmt,4,1,ls_colname,ll_maxlen,ll_maxlen)
    sqlbindcol(hstmt,6,1,ls_type,ll_maxlen,ll_maxlen)
    lb_columns.setredraw(false)
    do while sqlfetch(hstmt)=0
         lb_columns.additem(ls_colname+"~t"+ls_type)
    loop
    lb_columns.setredraw(true)
    li_ret=sqlfreestmt(hstmt,0)
end if
在按钮cb_exit的clicked事件中写入以下代码:
    close(parent)
在应用对象的open事件中写入以下代码:
    open(w_odbc_data_sources)
上一篇:logminer使用方法 人气:598
下一篇:将数据导出成为文本格式的备份的shell脚本 人气:734
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐