Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Adatbázis rendszerek II Kovács László Az SQL-CLI és ODBC környezet.

Hasonló előadás


Az előadások a következő témára: "Adatbázis rendszerek II Kovács László Az SQL-CLI és ODBC környezet."— Előadás másolata:

1 Adatbázis rendszerek II Kovács László Az SQL-CLI és ODBC környezet

2 SQL-CLI Az SQL parancsok 80%-át gazdanyelvből adják ki 1992: erős igény egy új SQL API-ra E-SQL: - elüt a gazdanyelvtől - alapvetően statikus - egyetlen kapcsolatra épül - adatbázis függő (előfordító) új SQL API: - gazdanyelvhez illeszkedik - dinamikus - több párhuzamos kapcsolat - adatbázis független ISO SQL Access Group

3 SQL-CLI ISO-SQL-CLI(ODBC): - a gazdanyelv függvényeihez simul, az SQL parancsok paraméterként mennek át a DBMS-hez - nincs előfordító - leíró struktúrákat használ egy-egy kapcsolathoz - az API függvény könyvtár réteges felépítésű is lehet SQLExec(kapcs,”UPDATE dolgozo SET fiz=0”) gazdanyelvi program scanf(”%d”,&n); … SQL-CLI Library DBMS DBMS API Library

4 SQL-CLI SQL-CLI: ISO szabvány ODBC: az MS CLI implementációja szoros kapcsolat egymásra hatás Az API felületet definiálja Az API működési logikát értelmezi Implementáció kétrétegű library adatbázis függetlenség PHPCVFPVBDelphi … OracleMSServerDB2VFPExcel … ODBC

5 SQL-CLI ODBC struktúrája kliens alkalmazás (ODBC API hívások) ODBC vezérlő (meghajtók és kapcsolatok felügyelete ODBC meghajtó (hívások, parancsok konvertálása, kapcsolat tartás) adatforrás (relációs, táblázatkezelő,...)

6 SQL-CLI CLI-API elemek a kapcsolat, parancs leíró struktúrát handler-nek nevezik A handlerek létrehozása után adhatók ki a függvényhívások párhuzamosan több handler és kapcsolat élhet handler-ek létrehozása handler-ek lezárása

7 SQL-CLI CLI-API elemek A parancsok végrehajtásához is több API hívás kapcsolódik Lehet egylépcsős és kétlépcsős végrehajtás A CURSOR koncepcióra épül Az eredmény közvetlenül is lekérdezhető, vagy változóba irányítható A parancsok paraméterezhetőek

8 KÉP Thom Evans (?): Repetition

9 SQL-CLI Handlerek típusai session h. connection h. command h. A handlerek feladatai: - azonosítás - aktuális állapotot tárolása - aktuális parancs leírása - státusz tárolása A parancsokban a handlereket adjuk meg azonosítóként

10 SQL-CLI Handlerek kezelése e = sqlAllocEnv() c = sqlAllocConnect(e) p = sqlAllocStmt(c) sqlFreeStmt(p) sqlFreeConnect(c) sqlFreeEnv(e) Session handler: a kliens azonosítás Connecton handler: adatforrás kapcsolat azonosítás Statement handler: parancs azonosítás handler-ek létrehozása handler-ek felszabadítása

11 SQL-CLI Adatbázis kapcsolat kezelése SQLConnect(c_h, server, user, password); DBMS kapcsolódásnál név/jelszó azonosítás is élhet: DBMS kapcsolat bontás: SQLDisConnect(c_h, server, user, password); Explicit tranzakció nyitás: SQLStartTran(h_type,handl, acc_mode, isol_lev); Tranzakció lezárás: SQLEndTran(h_type,handl, mode); session transaction

12 SQL-CLI SQL parancs kiadása SQL-parancs kód QEP cache Parancs végrehajtási módok: - közvetlen - kétlépcsős (paraméterezhető)

13 SQL-CLI Közvetlen SQL parancs kiadása SQLExecDirect (s_h,parancs) Kétlépcsős SQL parancs kiadása SQLPrepare (s_h, parancs) SQLExecute (s_h) egyszeri ismétlődő Alkalmazás QEP kód SQLPrepare SQLExecute program

14 SQL-CLI Eredmény adatok feldolgozása A kurzor mechanizmusra épül DBMS Alkalmazás kurzor Ugrás a következő rekordra: SQLFetch (c_h) Mező értékek átvétele: SQLGetData (s_h, mező_sz, típus,...)

15 SQL-CLI Információ lekérés: SQLTables() SQLGetEnvAttr() SQLGetStmtAttr() SQLGetInfo() API függvény visszatérési értéke 2. SQLError(e_h, c_h,s_h,sqlstate,message,… ) Hiba észlelése: Paraméter beállítás: SQLSetEnvAttr() SQLSetStmtAtt... Alkalmazás AB Alkalmazás AB

16 SQL-CLI

17 SQL-ODBC ODBC struktúra Lehet egyszintű és kétszintű meghajtó DSN: data source name (adatforrás azonosító) Gazdanyelv függő API Működési paraméterek: - izolációs szint - tranzakció szint - timeout - adat konverziók

18 parancs konverzió adat konverzió kapcsolat felvétel funkció bővítés hibakezelés információ nyújtás SQL-ODBC ODBC Driver manager Driver 1 meghajtók kezelése kapcsolat az alkalmazással hibakezelés memória kezelés elemi konverziók információ nyújtás

19 SQL-ODBC SQLAllocEnv(&henv);//session létesítés SQLAllocConnect(henv,&hdbc);//kapcsolat leíró foglalás SQLConnect(hdbc,(unsigned char*) // kapcsolódás ”HELLO”,SQL_NTS,NULL,0, NULL,0); SQLAllocStmt(hdbc,&hstmt);//parancs leíró foglalás SQLExecDirect(nstmt,(unsigned char*) “SELECT * FROM Minta “, SQL_NTS);//parancs végrehajtás for (rc=SQLFetch(hstmt);rc==SQL_SUCCESS; rc=SQLFetch(hstmt)){//rekordok lekérdezése ciklusban SQLGetData(hstmt,1,SQL_C_CHAR,SzData, Sizeof(sydata),&cbData);//mező lekérdezése MessageBox(NULL,syData,”ODBC”,MB_OK); //az eredmény kiírása } SQLFreeStmt(hstmt,SQL_DROP);//parancs leírás SQLDisconnect(hdbe);//lekapcsolódás SQLFreeConnet(hdbe);//leíró felszabadítás SQLFreeEno(henv)//session leíró

20 SQL-CLI Gazdanyelvi változók kötése DB Alkalmazás adatcsere mező változó Fontos a konzisztens értelmezés (koccintás, villogás, bólintás,…) Értelmezés leíró struktúrákra van szükség mező név típus hossz cím... változó név típus hossz cím... automatikus konverzió

21 SQL-CLI Értelmezés leíró struktúrák Command Handler DB Alkalmazás IPDAPD IRDARD A leíró struktúrák feltöltése: - manuális - automatikus

22 SQL-CLI Közvetlen kezelés, paraméterezett SQL parancs int skod = 0; // kapcsolati változó SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE, &henv); SQLAllocHandle(SQL_HANDLE_DBC,henv, &hdbc); SQLAllocStmt(hdbc1, &hstmt); // handlerek allokálása SQLCHAR parancs = ”UPDATE dolg SET fiz=fiz*0.5 WHERE kod=? ”; // parancs szöveg, a ? Jel jelöli a paramétert if (SQLPrepare (hstmt,parancs,SQL_NTS) != SQL_SUCCESS) {…} // parancs előkészítése SQLGetStmtAttr(hstmt, SQL_ATTR_APP_PARAM_DESC, &hdesc1,…); // APD struktúra címének lekérdezése SQLSetDescRec(hdesc1,..., SQL_INTEGER, &skod,…); // APD paraméterek beállítása SQLGetStmtAttr(hstmt, SQL_ATTR_IMP_PARAM_DESC, &hdesc2,…); // IPD struktúra címének lekérdezése SQLSetDescRec(hdesc2,..., SQL_INTEGER, 1,…); // IPD mezőinek beállítása

23 … scanf(„%d”, &skod); // változó értékadása if (SQLExecute(hstmt) != SQL_SUCCESS) {…} // parancs végrehajtás … SQLEndTran(SQL_HANDLE_ENV, henv, SQL_COMMIT); // tranzakció lezárás SQLFreeHandle(SQL_HANDLE_STMT, hstmt); SQLDisconnect(hdbc); SQLFreeHandle(SQL_HANDLE_DBC, hdbc); // handlerek felszabadítása … folytatás...

24 SQL-CLI Közvetett kezelés, paraméterezett SQL parancs … char snev[100];// gazdanyelvi változók int sfiz,skod = 0; SQLCHAR parancs = ”UPDATE dolg SET fiz=fiz*0.5 WHERE kod=? ”; if (SQLPrepare (hstmt,parancs,SQL_NTS) != SQL_SUCCESS) {…} // parancs előkészítés if (SQLBindParameter(hstmt,…,SQL_INTEGER, &skod,…) != SQL_SUCCES ) {…} // input paraméterek kötése … scanf(„%d”, &skod); if (SQLExecute(hstmt) != SQL_SUCCESS) {…} // végrehajtás … if (SQLExecDirect(hstmt,”SELECT nev, fiz FROM dolg”,SQL_NTS) != SQL_SUCCES ) {…} // lekérdezés végrehajtás if (SQLBindCol(hstmt,…,1,SQL_CHAR,snev,…) != SQL_SUCCES){…} // eredmény mezők kötése while (SQLFetch(hstmt == SQL_SUCCESS) { sfiz = SQLGetData(hstmt,1,SQL_INTEGER,…); // direkt olv printf (”%s = %d\n”, snev, sfiz); // indirekt olv. } // beolvasási ciklus

25 ODBC / SQL-CLI / DB2-CLI Adatkapcsolati függvények ODBC SQL-CLI DB2-CLI SQLAllocConnect() Depr 95 V 1.1 SQLAllocEnv() Depr 95 V 1.1 SQLAllocHandle() Core 95 V 5 SQLBrowseConnect() Level 1 95 V 5 SQLConnect() Core 95 V 1.1 SQLDriverConnect() Core SQL3 V 2.1 SQLDrivers() Core No No SQLSetConnectAttr() Core 95 V 5 SQLSetConnectOption() Depr 95 V 2.1 SQLSetConnection() No SQL3 V 2.1

26 Parancs előkészítési függvények ODBC SQL-CLI DB2-CL SQLAllocStmt() Depr 95 V 1.1 SQLPrepare() Core 95 V 1.1 SQLExtendedPrepare() No No V 6 SQLExtendedBind() No No V 6 SQLBindParameter() Lvl 1 95 V 2.1 SQLSetParam() Depr No V 1.1 SQLParamOptions() Depr No V 2.1 SQLGetCursorName() Core 95 V 1.1 SQLSetCursorName() Core 95 V 1.1 Kapcsolat lezárás SQLDisconnect() Core 95 V 1.1 SQLEndTran() Core 95 V 5 SQLFreeConnect() Depr 95 V 1.1 SQLFreeEnv() Depr 95 V 1.1 ODBC / SQL-CLI / DB2-CLI

27 Parancs elküldési függvények ODBC SQL-CLI DB2-CL SQLDescribeParam() Level 2 SQL3 V 5 SQLExecute() Core 95 V 1.1 SQLExecDirect() Core 95 V 1.1 SQLNativeSql() Lvl 2 95 V 2.1 SQLNumParams() Lvl 2 95 V 2.1 SQLParamData() Lvl 1 95 V 2.1 SQLPutData() Core 95 V 2.1 Felszabadítás SQLFreeHandle() Core 95 V 1.1 SQLFreeStmt() Core 95 V 1.1 SQLCancel() Core 95 V 1.1 SQLCloseCursor() Core 95 V 5 ODBC / SQL-CLI / DB2-CLI

28 Eredmény lekérdezése ODBC SQL-CLI DB2-CL SQLRowCount() Core 95 V 1.1 SQLDescribeCol() Core 95 V 1.1 SQLColAttribute() Core Yes V 5 SQLColAttributes() Depr Yes V 1.1 SQLColumnPrivileges() Lev 2 95 V 2.1 SQLSetColAttributes() No No V 2.1 SQLBindCol() Core 95 V 1.1 SQLFetch() Core 95 V 1.1 SQLFetchScroll() Core 95 V 5 SQLExtendedFetch() Depr 95 V 2.1 SQLGetData() Core 95 V 1.1 SQLMoreResults() Lvl 1 SQL3 V 2.1 SQLNextResult() No Yes V7.1 SQLError() Depr 95 V 1.1 SQLGetDiagField() Core 95 V 5 SQLGetDiagRec() Core 95 V 5 SQLSetPos() Level 1 SQL3 V 5 SQLGetSQLCA() No No V 2.1 ODBC / SQL-CLI / DB2-CLI

29 Információ lekérdezése ODBC SQL-CLI DB2-CL SQLColumns() Lvl 1 SQL3 V 2.1 SQLForeignKeys() Lvl 2 SQL3 V 2.1 SQLPrimaryKeys() Lvl 1 SQL3 V 2.1 SQLProcedureColumns() Lvl 2 No V 2.1 SQLProcedures() Lvl 2 No V 2.1 SQLSpecialColumns() Core SQL3 V 2.1 SQLStatistics() Core SQL3 V 2.1 SQLTablePrivileges() Lvl 2 SQL3 V 2.1 SQLTables() Core SQL3 V 2.1 ODBC / SQL-CLI / DB2-CLI

30 PHP-ODBC odbc_connect() : adatbázis kapcsolódás odbc_exec() : közvetlen parancsvégrehajtás odbc_prepare() : előkészítés odbc_execute() : előkészített parancs végrehajtás odbc_fetch_row(): rekord beolvasás odbc_result() : egy mező átvétele az eredményből odbc_close() : kapcsolat zárása odbc_commit() : véglegesítés odbc_rollback() : visszagörgetés odbc_num_rows() : rekordok száma odbc_tables() : táblák adatai odbc_columns() : mezők adatai odbc_error() : hibakód odbc_fetch_array() : eredmény rekord átvétele tömbbe odbc_num_fields() : mezők darabszáma odbc_field_name() : mező neve odbc_set_options() : kapcsolati paraméter beállítás

31 PHP-ODBC

32 VFP-ODBC hdbe=SQLConnect(DSN, felhasználó, jelszó) SQLExec(hdbc,”SQL”,cursornev) SQLColumns(hdbc,”tabla”) SQLCommit (hdbc) SQLTables(hdbc) SQLSETProp(hdbc,parameter,ertek) SQLGetProp(hdbe,parmeter) SQLRollback(hdbc) SQLDisConnect(hdbc) egyszerűsített nyilvántartás - egy leíró struktúra (egész típusú azonosító) egyszerűsített adatkezelés - VFP lokális kurzorba tölti át az eredményt

33 pw = allt(thisform.jszo.value) con = sqlconnect("LocalServer","ujabb",pw) if con < 0 …… endif p = sqlexec(con,"SELECT max(kod) db FROM dolg","cu1") if p > 0 select cu1 kod = cu1.db + 1 endif p = sqlexec(con,"INSERT INTO DOLG VALUES(" + allt(str(kod))+ ",'" + allt(thisform.nev.value)+"') ") VFP-ODBC

34 kép Thom Evans: Whispers

35 Adatkezelés speciális elemei - ODBC szintek - ODBC kurzor módok - CLI APD/IPD leíró területek - CLI ARD/IRD leíró terület - API: getDesc/SetDesc - API : kötések (Binding) - Deffered parameters - Környezet beállítások

36 Thom Evans: My new hat


Letölteni ppt "Adatbázis rendszerek II Kovács László Az SQL-CLI és ODBC környezet."

Hasonló előadás


Google Hirdetések