WEB开发网
开发学院数据库Sybase 数据库基础(SYBASE) 阅读

数据库基础(SYBASE)

 2006-03-28 23:09:15 来源:WEB开发网   
核心提示:概述本部分主要讲解下列内容:1、SYBASE Open client描述2、确定何时使用open client DB-LIBRARY,何时使用open clientclient-library3、open client程序的作用4、client如何找到server,数据库基础(SYBASE),怎样用isql连接到SQL

概  述

本部分主要讲解下列内容:
1、SYBASE Open client描述
2、确定何时使用open client DB-LIBRARY,何时使用open client client-library
3、open client程序的作用
4、client如何找到server,怎样用isql连接到SQL Server


(一) SYBASE Client/Server 的含义:

当两个程序合作执行时,一个程序处于监听状态而另一个程序同时处于讲话状态。
—client 端:发送请求给SERVER端。
—Server 端:响应client端的请求
—有一个请求/响应协议,Client端和Server端共同遵守


· Open dient/Open Server协议是TDS协议,即表格数据流协议(Tabular Data Stream),由它负责全部数据的传送细节。
client/server的示例
·文件服务器:client端请求“给我下一个2K字节内容”Server端按此请求发送数据。
SQL Server:(client端请求,“更新这些行”Server端执行更新的动作
终端服务器:client端请求:“把我联到计算机主机上”,Server端执行连接。
TDS协议的特点:
TDS是sybase传送规则表格数据的专用协议
·与传送的语言无关
·与传送的数据无关(长度,字节顺序)
·与具体的网络或硬件平台无关
·是单一的协议
TDS协议的最大优点是,它负责处理所有数据传送细节。
SYBASE system 10 的Open client
使用open client 可以允许程序以一种标准的方法在client端和Server端传送信息,而不用考虑传送所用的网络和机器。
SYBASE System 10 Open client 结构
·System 10 DB_library
·System 10 client_library
·CS_library (common libraries)
·Bulk_limary (Command libraries)
·Internal libraries
·Net libraries
·Debug libraries
·language/char files
·isql,bcp,defncopy
·Sample code
·manuals for products(产品手册)
  DB—library 和client -library 都提供编写client端应用的例程, Sybase支持版本兼容,所有的cliene端的应用必须使用client_library或DB-library来和SERVER通信。
DB-library 和client-library 的对比
DB-library         client-library
·传统的API       ·open client 的最新API
·新特征:        ·新的SYSTEM 10支持。
-数字型,十进制数据类型    -Server端游标
-安全级别(B1,C2)     -动态SQL
               -异步处理
·支持client端游标     ·与open server完全集成和server   
              library共享数据结构
·4.6版的向前兼容     
DB-library 和Ct-library的用处:
·DB-library用于:
·已存在应用的维护
·不需要System 10 SQL Server特征的简单应用
ct-library用于:
·需要System 10 SQL Server功能的应用
·和Open Server配对使用的网关应用
·高级功能应用

(二) Client端如何找到Server端:
·必须有一个名称为interfaces的文件存在于client端的$SYBASE路径下
·Interfaces 文件应包含服务器名字和网络地址
·必须设定Client端机器上的下列环境变量
·SYBASE指出包含interfaces 文件的路径
    . SYBASE 指定希望联接的Server名称
    .DSQUERY 指定希望联接的缺省SERVER名称 
 . interfaces 文件结构:
  OMS-SERV
   query  tcp  Sun-ether  galaxy   2000
   master tcp  sun-ether   galaxy   2000  
  ·指定在确定机器上的Server名及端口的映射
  ·是一个ASCII文件
  ·包含下列信息:
   -服务器名字  -OMS-SERV
   -SOCKET的用法 –Ouery Master
   -网络和硬件平台类型  tcp sun-ether
   -机器名或IP地址(Server运行机器)-galaxy
   -Sever监听的逻辑端口号
SYBASE环境变量
  指出Sybase软件的根路径,以找出
   ·头文件
   ·库文件
   ·SYBASE命令文件isql
   ·其它文件
 QUERY变量:
  ·为多数的client程序指明缺省的联接Server
   ·指出interfaces文件中的入口如:OMS-SERV
如下图所示:


(三) Open-client编程:
目标:·确认所有DB -library的关键文件,在开发环境中已配置
   ·解释一个Db_library程序所用到的库文件,头文件和结构
   ·编译一个最小的Db_library 程序,以建立一个到SQL server的联接
DB-library的头文件:
  ·头文件应在SYBASE/include中找到
  ·sybdb.h包含:
   -DB-library标识,这些传递给SERVER
   -错误代码
   -返回代码
  ·Sybfront.h自动包含
    -cstypes.h 包括一些核心定义如:’CS_SUCCEED’      ‘CS_TRUE’ 和一些数据类型定义
    -csconfig.h包含后台平台定义和编译区分
·Open client程序中应包含上述头文件
  用法:在C程序开始
   #include<sybdb.h>
   #include<sybfront.h>
   -sybdb.h
   -sybfront.h   的示例代码参见附页。

编译脚本:
·连结所的必要的库函数
·指示头文件的位置
·示例:
#!/bin/sh
set LIBLOC=$sybase/Lib;
cc -g $1.c \
   -I$SYBASE/include
   -L$LIBLOC -L Sybdb \
   -lm -0  $1
脚本解释:
·使用的编译器,cc
·-g 标志允许运行debuge
·$1指示脚本第一句的内容
·-I指示查找头文件(.h)文件的位置
·-L指示连接库的位置
·-l指示寻找一个文件,其前缀为“Lib”并且扩展名为“.a”
·控制结构:
LONGREC:
  保存用户名,应用程序名.口令,主机名 一旦该结构发送给Server并建立一个连接后,该结构体就不必存在
DBDROCESS:
  保存Server的联接信息,命令缓冲,结果集或者状态调节client端和Server端的所有连接
分配LONGREC结构空间:
.dblogin( ) LONGREC结构分配内存
.用法:LONGREC *longin;
    login=dblogin( );
 dblogin( )也可以在环境变量中取缺省的用户名和主机名。
.设置用户名和口令:
 方法:用预定义宏实现一例:
  DBSETLUSER (login-prt,“eme151”);
  DBSETLPWD  (login-prt,“sybase”);
生成连接:
调用函数:dbopen( )
函数功能:设置网络通信
     登录到Server
     保留内存空间给连接指针conn_ptr
用法:
 DBPROCESS  *conn_ptr;
 LONGREC   *login_ptr;
 Conn_ptr=dbopen (login_ptr,“sybase”);
  If ( conn_ptr==(DBPROCESS*)NULL)
   Œ;
   printf(“fail in dbopen”);
   exit(STDERR); 
  ;
使用说明:
conn_ptr=dbopen( login_ptr,server-name);
conn_ptr 已经打开的server连接
login-ptr  指向LONGREC结构体的指针
server-name 所要连接的服务器名,若为NULL,则引用DSQUERY指定的服务器名
创建一个最小程序:
1、包括头文件
2、初始化DB-library函数库
3、关闭DB-library连接
目的在于验证程序的开发环境是否正确配置,包括头文件、库文件
程序清单:
#include<stdio.h>
#include<sybfront.h>
#include<sybdb.h>
main( )
Œ;
dbinit( );  /*初始化函数库*/
dbexit( ); /*关闭DB_lib连接*/
;
dbinit( )功能:初始化函数库,必须在呼叫其它DB-lib 函数之前调用
dbexit( ) 关闭所存的Server连接。
创建一个联接到Server的程序
 



为了能够连结到Server,必须分配一个LONGREC结构,设定用户名和口令,生成一个Server连接。
dbopen的返回结果:
   dbopen如果返回一个有效的conn_ptr,则连接成功
 如果conn_ptr为NULL,则一般原因如下:
·无效登录(用户口令)
·未知的机器名
·Server关闭
·interfaces文件中未找到指定的server名字
·对interfaces文件无读权限。
·SYBASE环境变量设置错误
·网络故障
程序清单如下:
#include(sedio.h>
#include<sybfront.h>
#include<sybdb.h>
main( )
Œ;
  DBPROCESS *conn_ptr;
  LONGREC *login_ptr;
  dbinit( );
  login_ptr=dblogin( );
  DBSETLUSER(login_ptr,“eme151”);
  DBSETLPWD(login_ptr,“sybase”);
  Conn_ptr=dbopen(login_ptr,“TAZZ”);
if (conn_ptr= (DBPROCESS*)NULL)
 Œ;
  printf(“lould not connected to server!\n”);
  exit(FAIL);
;
 dbexit( );
 exit(SUCCEED);
;
设计较为复杂的open-client程序:
设计流程:
dbcmd( )函数说明:
功能:填充命令缓冲区,提供一个指向命令缓冲区的指针
示例:DBCHAR,sqltext[1024];
   strcpy(sqltext,“stlect * from titles”);
   dbcmd(conn_ptr,sqltext);
说明:conn_ptr 命令语句要发送到的联接
    buffer  包含sql语句字符串缓冲区的地址
dbsqlexec( )函数说明:
功能:发送批处理到Server
用法:DBPROCESS *conn_ptr;
   dbsqlexec(conn_ptr);
注意:如果批处理命令中的一个包含语法错,则整个批的命令,全部取消
dbresults( )函数说明:
功能:确定缓冲区中每个命令的执行状态
   完成和Server的握手,但不从Server获取数据
语法:RETCODE ret
   ret=dbresults(conn_ptr);
注意:在成功调用dbresults( ).后,在DBPROCESS结构体中关于数据的信息方可使用。
dbresults( )的返回值:
.SUCCEED :结果集对进程而言可用
.NO_MORE_RESULTS
 -所有的结果集已经处理完成
 -连接准备接收和下一个命令
.FAIL
 -dbresults( )失败
 -一般由于权限问题引起
dbclose( )函数说明:
功能:发送登录信息给SQL SERVER并且关闭单个连接
示例:DBPROCESS *conn_ptr
   dbclose(conn_ptr);
dbexit( )函数说明:
功能:关闭所有打开的联接,不需任何参数
dbbind( )函数说明:
功能:绑定Sybase表列到程序变量
语法:DBINT     column_number;
   DBINT     bindtype;
   DBINT     target_length;
   BYTE      *target_address
   dbbind(conn_ptr,column_number,bindtype,
      target_length,target_address)
   ·conn-ptr到server的联接名
   ·column_number 列的序号(自1开始)
   ·bindtype  标识值,指明绑定类型
   ·target_length 拷贝到目标位置的字节数
   ·larget_address 接收数据的目标位置
示例:
DBPROCESS *conn_ptr
DBCHAR   rowbuffer[255][255];
while((ret=dbresults(conn_ptr))!=NO_MORE_RESULTS)
Œ;
   if (ret = =SUCCEED)
   Œ;
    for (i=0; i<dbnumcols(conn_ptr);i++)
     Œ;
       dbbind (conn_ptr,),NTSTRINGBIND,0,
      Rowbuffer[0];

Tags:数据库 基础 SYBASE

编辑录入:coldstar [复制链接] [打 印]
赞助商链接