Client và Server trong mụi trường SQL

Một phần của tài liệu Tài liệu Giáo trình Ngôn ngữ SQL docx (Trang 135)

L IM ĐU ỞẦ

3.3.4 Client và Server trong mụi trường SQL

M t mụi trộ ường SQL cú nhi u h n m t t p h p cỏc danh m c và lề ơ ộ ậ ợ ụ ược đ . Nú bao ch a cỏc cỏc ph n t cú m c đớch là h tr cỏc thao tỏc trờn cồ ứ ầ ử ụ ỗ ợ ơ s d li u ho c cỏc c s d li u đở ữ ệ ặ ơ ở ữ ệ ược cỏc danh m c và lụ ược đ đú miờuồ t . Trong m t mụi trả ộ ường SQL cú hai ki u ti n trỡnh đ c bi t: cỏc SQLể ế ặ ệ client và cỏc SQL server. M t server h tr cỏc thao tỏc trờn cỏc ph n t cộ ỗ ợ ầ ử ơ s d li u, và m t client cho phộp m t ngở ữ ệ ộ ộ ười dựng k t n i đ n m t serverế ố ế ộ và thao tỏc trờn c s d li u. Cú th tơ ở ữ ệ ể ưởng tượng r ng server ch y trờnằ ạ m t mỏy ch l n, mỏy ch này l u tr cỏc c s d li u và client ch yộ ủ ớ ủ ư ữ ơ ở ữ ệ ạ trờn m t mỏy ch khỏc, cú th là m t mỏy tr m cỏ nhõn cỏch xa so v iộ ủ ể ộ ạ ớ server. Tuy nhiờn, cũng cú th c client và server ch y trờn cựng m t mỏyể ả ạ ộ ch .ủ

3.3.5 K t n iế ố

N u chỳng ta cú m t chế ộ ương trỡnh nào đú cú ch a SQL t i m t mỏy màứ ạ ộ đú cú t n t i SQL client thỡ chỳng ta cú th m m t k t n i gi a Client

ở ồ ạ ể ở ộ ế ố ữ

và Server b ng cỏch th c hi n l nh SQL:ằ ự ệ ệ

CONNECT TO < Tờn Server> AS < Tờn k t n i>ế ố AUTHORIZATION < Tờn và m t kh u >ậ ẩ

Tờn c a Server ph thu c vào s cài đ t. T DEFAULT cú th thay thủ ụ ộ ự ặ ừ ể ế cho m t tờn và s k t n i ngộ ẽ ế ố ười dựng v i m t SQL Server nào đú mà sớ ộ ự cài đ t xem nh m t Server m c đ nh. Tờn và m t kh u c a ngặ ư ộ ặ ị ậ ẩ ủ ười dựng là m t phộ ương phỏp đ cho Server cú th xỏc đ nh để ể ị ược người dựng. Người ta cú th s d ng m t xõu khỏc đi sau AUTHORIZATION. ể ử ụ ộ

Tờn k t n i cú th đế ố ể ược s d ng đ sau này tham chi u đ n k t n i.ử ụ ể ế ế ế ố Nguyờn nhõn c a vi c chỳng ta ph i tham chi u đ n k t n i là SQL choủ ệ ả ế ế ế ố phộp ngườ ử ụi s d ng m nhi u k t n i nh ng t i m t th i đi m ch cúở ề ế ố ư ạ ộ ờ ể ỉ m t k t n i ho t đ ng. Đ chuy n qua chuy n l i gi a cỏc k t n i,ộ ế ố ạ ộ ể ể ể ạ ữ ế ố chỳng ta cú th s d ng l nhể ử ụ ệ

SET CONNECTION conn1; L nh này kớch ho t k t n i cú tờn là conn1, k t n i hi n th i tr thànhệ ạ ế ố ế ố ệ ờ ở “ng ”. M t k t n i “ng ” đủ ộ ế ố ủ ược kớch ho t l i b ng l nh SETạ ạ ằ ệ CONNECTION cú ghi rừ tờn nú. Chỳng ta cũng s d ng tờn k t n i khi mu n đỡnh ch k t n i. Vớ d ,ử ụ ế ố ố ỉ ế ố ụ chỳng ta cú th đỡnh ch k t n i conn1 b ng l nh:ể ỉ ế ố ằ ệ DISCONNECT conn1; Bõy gi conn1 k t thỳc. Nú khụng ph i ng và khụng th kớch ho t l iờ ế ả ủ ể ạ ạ được.

Tuy nhiờn, n u chỳng ta s khụng bao gi c n tham chi u đ n m t k tế ẽ ờ ầ ế ế ộ ế n i đó đố ược t o ra thỡ AS và tờn k t n i cú th b b kh i l nhạ ế ố ể ị ỏ ỏ ệ CONNECT TO. Vi c chuy n cỏc l nh k t n i liờn ti p nhau cũng đệ ể ệ ế ố ế ược cho phộp. N u chỳng ta th c hi n cỏc l nh SQL m t cỏch đ n gi n t iế ự ệ ệ ộ ơ ả ạ m t tr m cú SQL Client thỡ m t k t n i m c đ nh s độ ạ ộ ế ố ặ ị ẽ ược thi t l p thayế ậ cho chỳng ta.

3.3.6 Phiờn (Session)

Cỏc thao tỏc SQL được th c hi n khi m t k t n i ho t đ ng đự ệ ộ ế ố ạ ộ ược g i làọ m t phiờn. Phiờn t n t i chung cựng v i k t n i đó t o ra nú. Vớ d , khiộ ồ ạ ớ ế ố ạ ụ m t k t n i độ ế ố ược làm ng , phiờn c a nú cũng tr thành ng và vi c ho tủ ủ ở ủ ệ ạ đ ng tr l i c a k t n i b ng l nh SET CONNECTION cũng làm choộ ở ạ ủ ế ố ằ ệ phiờn ho t đ ng. Nh v y, chỳng ta đó ch ra phiờn và k t n i nh hai m tạ ộ ư ậ ỉ ế ố ư ặ c a k t n i gi a Client và Server trong hỡnh 3.17ủ ế ố ữ ở

Mụi trường K t n iCLIENTSQL ế ố SQL SERVER SQL-agent Module

Hỡnh 3.17: Cỏc giao ti p SQL client-serverế

M i phiờn cú m t danh m c hi n t i và m t lỗ ộ ụ ệ ạ ộ ược đ hi n t i bờn trongồ ệ ạ danh m c đú. Chỳng cú th đụ ể ược thi t l p b ng cỏc l nh SET SCHEMAế ậ ằ ệ và SET CATALOG tương ng. V i m i phiờn cú m t ngứ ớ ỗ ộ ườ ử ụi s d ng được phộp.

3.3.7 Modules

M t module là m t thu t ng SQL dành cho m t chộ ộ ậ ữ ộ ương trỡnh ng d ng.ứ ụ Chu n SQL đ xu t ba lo i module nh ng ch nh n m nh r ng m i càiẩ ề ấ ạ ư ỉ ấ ạ ằ ỗ đ t SQL cung c p cho ngặ ấ ười dựng ớt nh t là m t trong cỏc lo i đú.ấ ộ ạ

1. Giao di n SQL chung (generic SQL interface): Ngệ ườ ử ụi s d ng gừ vào cỏc l nh SQL, cỏc l nh này s đệ ệ ẽ ược m t SQL erver th c hi n.ộ ự ệ Trong ch đ này, m t l nh ho c m t truy v n chớnh là m t module. Đaế ộ ộ ệ ặ ộ ấ ộ s cỏc vớ d đố ụ ược cho trong tài li u này là m t module thu c lo i này m cệ ộ ộ ạ ặ dự trong th c t nú r t ớt đự ế ấ ượ ử ục s d ng.

2. SQL nhỳng: Ki u này đó để ược trỡnh bày ph n 3.1, trong đúở ầ cỏc l nh SQL xu t hi n bờn trong cỏc chệ ấ ệ ương trỡnh ngụn ng ch và đữ ủ ược gi i thi u b ng EXEC SQL. Trớ ệ ằ ước tiờn, m t b ti n x lý s bi n đ i cỏcộ ộ ề ử ẽ ế ổ l nh SQL nhỳng thành cỏc l i g i hàm ho c th t c đ n h th ng SQLệ ờ ọ ặ ủ ụ ế ệ ố thớch h p. Chợ ương trỡnh ngụn ng ch đó đữ ủ ược biờn d ch, bao g m c cỏcị ồ ả l i g i này, là m t module.ờ ọ ộ

3. Cỏc module th c th (True Modules): D ng t ng quỏt nh t c a moduleự ụ ạ ổ ấ ủ do SQL cung c p là d ng mà trong đú cú m t t p cỏc hàm ho c cỏc thấ ạ ộ ậ ặ ủ t c đụ ượ ưc l u gi , m t s trong chỳng là mó ngụn ng ch và m t s làữ ộ ố ữ ủ ộ ố cỏc cõu l nh SQL. Chỳng trao đ i v i nhau b ng cỏch chuy n tham sệ ổ ớ ằ ể ố thụng qua cỏc bi n dựng chung. Cỏc module PSM là cỏc vớ d v ki uế ụ ề ể module này.

M t th c hi n c a m t module độ ự ệ ủ ộ ược g i là m t SQL-agent. Trong hỡnhọ ộ 3.17 chỳng ta đó ch ra c m t module và m t SQL-agent, nh là m t đ nỉ ả ộ ộ ư ộ ơ

nh r ng s khỏc nhau gi a m t module và m t SQL-agent tớ ằ ự ữ ộ ộ ương t nhự ư s khỏc nhau gi a m t chự ữ ộ ương trỡnh và m t ti n trỡnh. Chộ ế ương trỡnh là mó l nh cũn ti n trỡnh là s th c hi n cỏc mó l nh đú. ệ ế ự ự ệ ệ

3.4 S D NG GIAO DI N M C G I (call-level interface)Ử Ụ

Trong ph n này chỳng ta tr l i vi c k t h p cỏc thao tỏc SQL và cỏcầ ở ạ ệ ế ợ chương trỡnh ngụn ng ch . Chỳng ta đó nhỡn th y SQL nhỳng trong ph nữ ủ ấ ầ 3.1, chỳng ta cũng đó núi đ n cỏc th t c đế ủ ụ ượ ưc l u gi trong lữ ược đ ồ ở ph n 3.2. Trong ph n này chỳng ta th o lu n m t cỏch ti p c n th ba, đúầ ầ ả ậ ộ ế ậ ứ là vi c s d ng giao di n m c g i. Khi s d ng m t giao di n m c g iệ ử ụ ệ ứ ọ ử ụ ộ ệ ứ ọ (call-level interface – CLI), chỳng ta vi t m t chế ộ ương trỡnh b ng m t ngụnằ ộ ng ch thụng thữ ủ ường và chỳng ta s d ng m t th vi n cỏc hàm, cỏcử ụ ộ ư ệ hàm này cho phộp chỳng ta k t n i đ n và truy c p m t c s d li uế ố ế ậ ộ ơ ở ữ ệ b ng cỏch chuy n cỏc l nh SQL cho c s d li u đú. ằ ể ệ ơ ở ữ ệ

S khỏc nhau gi a cỏch ti p c n này và l p trỡnh SQL nhỳng, theo m tự ữ ế ậ ậ ộ nghĩa nào đú, là hỡnh th c. N u chỳng ta đó quan sỏt b ti n x lý làm gỡứ ế ộ ề ử v i cỏc l nh SQL nhỳng, chỳng ta cú th tỡm th y r ng chỳng đó đớ ệ ể ấ ằ ược thay th b ng cỏc l i g i đ n cỏc hàm th vi n gi ng nh cỏc hàm trongế ằ ờ ọ ế ư ệ ố ư chu n SQL/CLI. Tuy nhiờn, khi cỏc hàm CLI chuy n SQL m t cỏch tr cẩ ể ộ ự ti p đ n mỏy ch c s d li u, cú m t ớch l i v m t m c đ c l p hế ế ủ ơ ở ữ ệ ộ ợ ề ộ ứ ộ ậ ệ th ng nào đ y. Nh v y, v nguyờn t c, chỳng ta cú th ch y cựng m tố ấ ư ậ ề ắ ể ạ ộ chương trỡnh ngụn ng ch t i nhi u tr m cú s d ng cỏc h qu n tr cữ ủ ạ ề ạ ử ụ ệ ả ị ơ s d li u khỏc nhau. Ch ng nào cỏc h qu n tr c s d li u này ch pở ữ ệ ừ ệ ả ị ơ ở ữ ệ ấ nh n SQL chu n thỡ cựng m t chậ ẩ ộ ương trỡnh cú th ch y t i m i tr m màể ạ ạ ọ ạ khụng c n cỏc b ti n x lý đầ ộ ề ử ược thi t k đ c bi t. ế ế ặ ệ

M t trong cỏc giao di n m c g i là SQL/CLI chu n. ộ ệ ứ ọ ẩ

3.4.1 Nh p mụn SQL/CLIậ

M t chộ ương trỡnh được vi t trong ngụn ng C và s d ng SQL/CLI sế ữ ử ụ ẽ ch a file đ u sqlcli.h, t đú nú nh n đứ ầ ừ ậ ược m t s l n cỏc hàm, cỏc đ nhộ ố ớ ị nghĩa ki u, cỏc c u trỳc và cỏc h ng ký hi u. Sau đú chể ấ ằ ệ ương trỡnh cú thể t o ra và làm vi c v i 4 lo i b n ghi:ạ ệ ớ ạ ả

1. Mụi trường: M t b n ghi ki u này độ ả ể ượ ạc t o ra b ng m t chằ ộ ương trỡnh ng d ng (client) trong vi c chu n b cho m t ho c nhi u k tứ ụ ệ ẩ ị ộ ặ ề ế n i đ n server c s d li u. ố ế ơ ở ữ ệ

2. K t n i: M t trong cỏc b n ghi này đế ố ộ ả ượ ạc t o ra đ k t n i chể ế ố ương trỡnh ng d ng v i c s d li u. M i k t n i t n t i bờn trong m tứ ụ ớ ơ ở ữ ệ ỗ ế ố ồ ạ ộ mụi trường nào đ y.ấ

3. Cõu l nh: M t chệ ộ ương trỡnh ng d ng cú th t o ra m t ho c nhi uứ ụ ể ạ ộ ặ ề b n ghi cõu l nh. M i b n ghi gi thụng tin v m t l nh SQL đ nả ệ ỗ ả ữ ề ộ ệ ơ gi n bao g m m t cursor m c nhiờn n u cõu l nh là m t truy v n.ả ồ ộ ặ ế ệ ộ ấ cỏc th i đi m khỏc nhau, cựng m t l nh CLI cú th bi u di n cỏc

Ở ờ ể ộ ệ ể ể ễ

l nh SQL khỏc nhau. M i m t cõu l nh CLI t n t i bờn trong m tệ ỗ ộ ệ ồ ạ ộ k t n i nào đ y. ế ố ấ

4. Mụ t : Cỏc b n ghi này gi thụng tin v cỏc b ho c v cỏc thamả ả ữ ề ộ ặ ề s . Chố ương trỡnh ng d ng ho c mỏy ch c s d li u s thi t l pứ ụ ặ ủ ơ ở ữ ệ ẽ ế ậ cỏc thành ph n c a cỏc b n ghi mụ t đ ch ra tờn và ki u c a cỏcầ ủ ả ả ể ỉ ể ủ thu c tớnh và/ho c cỏc giỏ tr c a chỳng. M i cõu l nh cú nhi u cỏcộ ặ ị ủ ỗ ệ ề b n ghi đả ượ ạc t o ra m t cỏch khụng tộ ường minh nh v y, và ngư ậ ười dựng cú th t o ra nhi u h n n u c n. Trong trỡnh bày c a chỳng taể ạ ề ơ ế ầ ủ v CLI, cỏc b n ghi mụ t n i chung là s khụng nhỡn th y.ề ả ả ố ẽ ấ

M i m t b n ghi này đỗ ộ ả ược bi u di n trong chể ễ ương trỡnh ng d ngứ ụ b ng m t handle, đú là m t con tr đ n b n ghi. File sqlcli.h cung c p cỏcằ ộ ộ ỏ ế ả ấ ki u đ i v i cỏc handle mụi trể ố ớ ường, k t n i, cõu l nh, mụ t tế ố ệ ả ương ngứ là: SQLHENV, SQLHDBC,SQLHSTMT, SQLHDESC, m c dự chỳng ta cúặ th nghĩ v chỳng nh cỏc bi n tr ho c cỏc s nguyờn. Chỳng ta s sể ề ư ế ỏ ặ ố ẽ ử d ng cỏc ki u này và m t s ki u đụ ể ộ ố ể ược đ nh nghĩa khỏc v i cỏc gi i thớchị ớ ả rừ ràng, nh là SQLCHAR và SQLINTEGER. Cỏc ki u này đư ể ược cung c pấ trong sqlcli.h.

Chỳng ta s khụng đi đ n chi ti t v vi c cỏc mụ t đẽ ế ế ề ệ ả ược thi t l p vàế ậ đượ ử ục s d ng nh th nào. Tuy nhiờn ta s bàn v ba ki u b n ghi khỏcư ế ẽ ề ể ả đượ ạc t o ra b ng cỏch s d ng m t hàmằ ử ụ ộ

Trong đú, ba tham s là:ố

1. hType là ki u c a handle mong mu n. Sể ủ ố ử d ngụ SQL_HANDLE_ENV cho m t mụi trộ ường m i,ớ SQL_HANDLE_DBC cho m t k t n i m i, ho cộ ế ố ớ ặ SQL_HANDLE_STMT cho m t cõu l nh m i. ộ ệ ớ

2. hIn là m t handle c a ph n t m c cao trong dú ph n t v a m iộ ủ ầ ử ứ ầ ử ừ ớ t o ra s ng. Tham s này là SQL_NULL_HANDLE n u chỳng taạ ố ố ế mu n m t mụi trố ộ ường; tờn c a mụi trủ ường là m t h ng độ ằ ược đ nhị nghĩa núi v i SQLAllocHandle r ng khụng cú giỏ tr thớch h p đõy.ớ ằ ị ợ ở N u chỳng ta mu n m t handle k t n i thỡ hIn là handle c a mụiế ố ộ ế ố ủ trường mà trong đú cú t n t i k t n i. N u chỳng ta mu n m tồ ạ ế ố ế ố ộ handle cõu l nh, thỡ hIn là handle c a k t n i mà trong đú cõu l nhệ ủ ế ố ệ s t n t i.ẽ ồ ạ

3. hOut là đ a ch c a handle do SQLAllocHandle t o ra.ị ỉ ủ ạ

SQLAllocHandle cũng tr l i m t giỏ tr thu c ki u SQLRETURN (m tả ạ ộ ị ộ ể ộ s nguyờn). Giỏ tr này là 0 n u khụng cú l i nào x y ra, và là m t giỏ trố ị ế ỗ ả ộ ị khỏc 0 n u cú xu t hi n l i. ế ấ ệ ỗ

Vớ d 3.18ụ Chỳng ta hóy xem hàm HangLuong c a hỡnh 3.4 s b t đ uủ ẽ ắ ầ trong CLI nh th nào. (Hàm HangLuong đó đư ế ược chỳng ta s d ng nhử ụ ư m t vớ d v SQL nhỳng). Nh l i r ng hàm này kh o sỏt t t c cỏc bộ ụ ề ớ ạ ằ ả ấ ả ộ c a NHÂNVIấN và x p lo i lủ ế ạ ương c a chỳng. Cỏc bủ ước đ u tiờn đầ ược ch ra hỡnh 3.1.8:ỉ ở

1) #include sqlcli.h 2) SQLHENV MyEnv; 3) SQLHDBC MyCon; 4) SQLHSTMT execStat

5) SQLRETURN errorCode1, errorCode2, errorCode3; 6) ErrorCode1=SQLAllocHandle(SQL_HANDLE_ENV,

SQL_NULL_HANDLE, &myEnv); 7) If(!errorCode1)

8) ErrorCode2 = SQLAllocHandle(SQL_HANDLE_DCB, myEnv, &myCon); 9) If(!errorCode2) 10) ErrorCode3=SQLAllocHandle(SQL_HANDLE_STMT,myCon,&exe cStat); Hỡnh 3.18: Mụ t và t o ra m t mụi trả ạ ộ ường, m t k t n i và m t l nh.ộ ế ố ộ ệ

Cỏc dũng t 2) đ n 4) mụ t handle cho m t mụi trừ ế ả ộ ường, k t n i và cõuế ố l nh tệ ương ng. Tờn c a chỳng là myEnv, myCon và execStat tứ ủ ương

ng. Chỳng ta d ki n r ng execStat s bi u di n l nh

ứ ự ế ằ ẽ ể ễ ệ

SELECT Luong FROM NHÂNVIấN ;

gi ng nh con tr execCursor đó làm trong hỡnh 3.4 nh ng v n ch a cúố ư ỏ ư ẫ ư l nh SQL nào đệ ược liờn k t v i execStat. Dũng 5) khai bỏo ba bi n mà cỏcế ớ ế l i g i hàm cú th đ t tr l i c a chỳng vào đú và ch ra m t l i. M t giỏờ ọ ể ặ ả ờ ủ ỉ ộ ỗ ộ tr 0 ch ra khụng cú l i nào x y ra trong l i g i và chỳng ta đang mong đ iị ỉ ỗ ả ờ ọ ợ trường h p đú. ợ

Dũng 6) g i SQLAllocHandle, yờu c u m t handle mụi trọ ầ ộ ường (đ i s thố ố ứ nh t), cung c p m t handle null trong đ i s th hai (b i vỡ khi chỳng taấ ấ ộ ố ố ứ ở đang yờu c u m t handle mụi trầ ộ ường thỡ chỳng ta khụng c n gỡ c ) và cungầ ả c p m t đ a ch c a myEnv nh là đ i s th ba; handle đấ ộ ị ỉ ủ ư ố ố ứ ượ ạc t o ra sẽ được đ t đõy. N u dũng 6) là thành cụng, cỏc dũng 7) và 8) s d ngặ ở ế ử ụ handle mụi trường đ nh n m t handle k t n i trong myCon. Gi thi tể ậ ộ ế ố ả ế r ng l i g i đú cũng thành cụng, cỏc dũng 9) và 10) nh n m t handle l nhằ ờ ọ ậ ộ ệ cho execStat.

3.4.2 X lý cỏc l nhử

cu i c a hỡnh 3.18, m t b n ghi l nh cú handle là execStat đó đỞ ố ủ ộ ả ệ ượ ạc t o ra. Tuy nhiờn b n ghi này v n ch a đả ẫ ư ược n i v i l nh SQL. Ti n trỡnhố ớ ệ ế k t n i và th c hi n cỏc l nh SQL v i cỏc handle tế ố ự ệ ệ ớ ương t nh SQL đ ngự ư ộ được mụ t trong ph n 3.1.10. đõy, chỳng ta k t h p văn b n c a m tả ầ Ở ế ợ ả ủ ộ l nh SQL v i m t “ bi n SQL” b ng cỏch s d ng PREPARE và sau đúệ ớ ộ ế ằ ử ụ th c hi n nú b ng cỏch s d ng EXECUTE.ự ệ ằ ử ụ

Tỡnh tr ng trong CLI hoàn toàn tạ ương t n u chỳng ta nghĩ v “ bi nự ế ề ế SQL” nh là m t handle l nh. Cú m t hàmư ộ ệ ộ

SQLPrepare (sh, st, sl), nú l y:ấ 1. M t handle l nh shộ ệ

2. M t bi n tr đ n m t l nh SQL st, vàộ ế ỏ ế ộ ệ

3. M t đ dài sl cho xõu ký t do st ch đ n. N u chỳng ta khụng bi t độ ộ ự ỉ ế ế ế ộ dài, m t h ng độ ằ ược đ nh nghĩa SQL_NTS yờu c u SQLPrepare t tớnhị ầ ự

Một phần của tài liệu Tài liệu Giáo trình Ngôn ngữ SQL docx (Trang 135)

Tải bản đầy đủ (PDF)

(180 trang)