程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase綜合文章 >> 數據庫基礎(SYBASE)

數據庫基礎(SYBASE)

編輯:SyBase綜合文章
概 述

本部分主要講解下列內容:
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文件
·包含下列信息:
&nbs
您正在看的Sybase教程是:數據庫基礎(Sybase)。p; -服務器名字 -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
#include
-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指定的服務器名

您正在看的Sybase教程是:數據庫基礎(Sybase)。創建一個最小程序:
1、包括頭文件
2、初始化DB-library函數庫
3、關閉DB-library連接
目的在於驗證程序的開發環境是否正確配置,包括頭文件、庫文件
程序清單:
#include
#include
#include
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
#include
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開始)
&nb

您正在看的Sybase教程是:數據庫基礎(Sybase)。sp;·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 Œ;
dbbind (conn_ptr,),NTSTRINGBIND,0,
Rowbuffer[0];
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved