2015年新員工培訓(xùn)周四嵌入sql語(yǔ)言開發(fā)_第1頁(yè)
2015年新員工培訓(xùn)周四嵌入sql語(yǔ)言開發(fā)_第2頁(yè)
2015年新員工培訓(xùn)周四嵌入sql語(yǔ)言開發(fā)_第3頁(yè)
2015年新員工培訓(xùn)周四嵌入sql語(yǔ)言開發(fā)_第4頁(yè)
2015年新員工培訓(xùn)周四嵌入sql語(yǔ)言開發(fā)_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、SQLSQL 時(shí)所采取的編程式數(shù)據(jù)庫(kù)語(yǔ)言。SQL 數(shù)據(jù)庫(kù)的程序時(shí),必須從普通的編程語(yǔ)言開始(C 語(yǔ)言SQLSQLSQL SQLSQL 時(shí)所采取的編程式數(shù)據(jù)庫(kù)語(yǔ)言。SQL 數(shù)據(jù)庫(kù)的程序時(shí),必須從普通的編程語(yǔ)言開始(C 語(yǔ)言SQLSQLSQL 被程序設(shè)計(jì)語(yǔ)言(C 語(yǔ)言)的編譯器識(shí)別的函數(shù)調(diào)用。然后,C 編譯器編譯源代碼為可SQLANSI/ISO SQL做一個(gè)簡(jiǎn)單、實(shí)用的介SQL語(yǔ)句完成的功能也可以通過(guò)應(yīng)用程序接口(API)API 的SQL DBMSAPI 調(diào)用返回查詢結(jié)果。這個(gè)方法不需要1.1 SQL以IBMDB2SQLSQLLELASTNAMEJOHNSONNAME#include #inclu

2、de #include #include util.h #include EXECSQLINCLUDEEXECSQLBEGINDECLARESECTION; char dname9; char userid9; char passwd19;EXEC SQL END DECLARE SECTION; EXEC SQL CONNECT TO sle; (3)EXECSQLO name FROMWHERELASTNAME=JOHNSON;(4) If (SQLCODE )f( “errcode=%d”,SQLCODE); f( name = %sn,name ); includeSQLCASQLCA

3、的結(jié)構(gòu)。SQLCA用于應(yīng)用程序和數(shù)據(jù)SQLCODE SQL 語(yǔ)句執(zhí)行后的結(jié)果狀態(tài)。BEGINDECLARE SECTIONEND DECLARE SECTION includeSQLCASQLCA的結(jié)構(gòu)。SQLCA用于應(yīng)用程序和數(shù)據(jù)SQLCODE SQL 語(yǔ)句執(zhí)行后的結(jié)果狀態(tài)。BEGINDECLARE SECTIONEND DECLARE SECTIONSQL C (4)employee LASTNAME 為“JOHNSON SQLSQLSQLSQLSQL SQLDBMS SQL SQL 分析、確認(rèn)和優(yōu)化語(yǔ)句,并為其生成執(zhí)行計(jì)劃。DBMS SQLCODE 以表明語(yǔ)句中發(fā) SQL語(yǔ)句的執(zhí)行情況,

4、它有助于用戶分析應(yīng)用程序的錯(cuò)誤所在。這些信息都存放sqlca.hsqlcaSQL語(yǔ)句,則必須要在源程序中定義一 EXECSQLCONNECTreturnSQL SQL IBMDB2SQL SQL SQL IBMDB2SQL SQLCSQL語(yǔ)句的大部分都已確3.1 SQLCLELASTNAMEJOHNSONNAME#include #include #include #include util.h #include EXECSQLINCLUDE#define CHECKERR(CE_STR) if(check_error(CE_STR,&sqlca)!=0)return1; check_erro

5、r (char eString, struct sqlca *caPo er) chareBuffer1024; charsBuffer1024; short rc, Erc;if(caPo er-sqlcode!=0)f(-errorreport-f(ERRORoccured:%s.nSQLCODE:%ldn,er-returnargc,char*argv)EXECSQLBEGINDECLAREf(ERRORoccured:%s.nSQLCODE:%ldn,er-returnargc,char*argv)EXECSQLBEGINDECLAREcharcharcharEXECSQLENDDEC

6、LAREf(leCprogram:ICnif(argc=1)EXECSQLCONNECTTOCHECKERR(CONNECTTOelseif(argc=3)strcpy(userid,strcpy(passwd,EXECSQLCONNECTTOleUSER:useridUSINGCHECKERR(CONNECTTOelse f(nUSAGE:icuseridreturn/*endifEXECSQLO FROM BEGIN DECLARE SECTIONEND DECLARE SECTIONSQL BEGIN DECLARE SECTIONEND DECLARE SECTIONSQLSQLSQL

7、CONNECT SQL3.2 SQL3.2.11SQL 變量WHERE LASTNAME = JOHNSONLASTNAME=:name;(4) CHECKERR (SELECT sf( name = %sn,name ); EXEC SQL CONNECT RESET;CHECKERR (CONNECT RESET);return/*endof program:IC.SQCEXECSQLO FROMWHERELASTNAME=在SQLBEGINDECLARESECTION DECLARE SECTIONEXECSQLO FROMWHERELASTNAME=在SQLBEGINDECLARESE

8、CTION DECLARE SECTIONCSQL語(yǔ)句使用宿主變量把數(shù)據(jù)庫(kù)中查詢到的 30EXECSQL 2SQL SQL 語(yǔ)句中,必須CDB2EXECSQLBEGINDECLAREshorthostvar1=char*hostvar2=EXECSQLENDDECLAREEXEC SQL UPDATE inventory SET department = :hostvar1 WHEREpart_num=4572-3;EXEC SQL UPDATE inventory SETprod_descrip=:hostvar2WHEREpart_num=4572-update語(yǔ)句中,department

9、 shortC DB2 hostvar1 update語(yǔ)句中,prod_descipvarcharhostvar2C到DB2hostvar2 update語(yǔ)句中,department shortC DB2 hostvar1 update語(yǔ)句中,prod_descipvarcharhostvar2C到DB2hostvar2 因?yàn)镃 沒有date time 數(shù)據(jù)類型,所以DB2 date time 列將被轉(zhuǎn)換為字符。缺省情況下,使用以下轉(zhuǎn)換格式:mm dd yyyy hh:mm:ssam | pm。你也可以使用字符數(shù)據(jù)格式 應(yīng)的數(shù)據(jù)類型。但可以使用char3 SQL EXEC SELECTO:pr

10、ice FROMWHEREau_id= DB2C無(wú) 。表示宿主變量應(yīng)該假設(shè)為 不予考慮mc3026price_nullflag 為- 。表示宿主變量應(yīng)該假設(shè)為 不予考慮mc3026price_nullflag 為- (3.2.2 O 3.2.3SELECT #include #include #include #include util.hEXECSQLINCLUDEif(check_error(CE_STR,&sqlca)!=0)return1; argc, char *argv) EXECSQLO FROMWHERELASTNAME=EXECSQLBEGINDECLAREcharcharE

11、XECSQLENDDECLAREf(leCprogram:CURSOREXECSQLBEGINDECLAREcharcharEXECSQLENDDECLAREf(leCprogram:CURSORnif(argc=1)EXECSQLCONNECTTOCHECKERR(CONNECTTOelseif(argc=3)strcpy(userid,strcpy(passwd,EXECSQLCONNECTTOleUSER:useridUSINGCHECKERR(CONNECTTOelse f(nUSAGE:cursoruseridreturn/*endifEXECSQLEXECSQLDECLARECUR

12、SOR SELECTname,deptFROMstaffWHEREFORUPDATEOFEXECSQLOPENCHECKERR(OPENWhile(1)EXECSQLFETCHO:pname,if(SQLCODE!=0)(UPTE (UPTE (4)CLOSEDB2SQL語(yǔ)句中INSERT、DELETE和UPDATE clerk #includef(%-10.10sindept.%2dwillbedemotedtoClerkn, pname, dept );EXECSQLEXEC SQL CLOSE c1;CHECKERR(CLOSECURSOR);If( ret=0EXECSQLEXECSQ

13、LROLLBACK; CHECKERR(ROLLBACK);f(nOnsecondthought-changesrolledback.n); EXEC SQL CONNECT RESET;CHECKERR(CONNECTreturn/*endofprogram:CURSOR.SQC#include#include#include#includeEXECSQLINCLUDEif(check_error(CE_STR,&sqlca)!=0)returnargc,#include#include#include#includeEXECSQLINCLUDEif(check_error(CE_STR,&

14、sqlca)!=0)returnargc,char*argv)EXECSQLBEGINDECLAREcharcharcharcharEXECSQLENDDECLAREf(leCif(argc=1)EXECSQLCONNECTTOCHECKERR(CONNECTTOelseif(argc=3)strcpy(userid,strcpy(passwd,EXECSQLCONNECTTOleUSER:useridUSING:passwd;CHECKERR(CONNECTTOelse f(nUSAGE:updatuseridreturn/*endifstrcpy(jobUpdate,EXECSQLUPDA

15、TEstaffSETjob=:jobUpdateWHEREjob=Mgr; (3)DB2 (3)DB2LE clerk 游標(biāo)操作除了可以將多行的查詢結(jié)果返回給應(yīng)用程序,它還可以與 UPDATE DELETE 相結(jié)合,根據(jù)游標(biāo)當(dāng)前的位置,對(duì)指針?biāo)傅倪@個(gè)行數(shù)據(jù)執(zhí)行 UPDATE f(AllMgrhavebeendemotedtoClerk!n); strcpy (jobUpdate, Sales);EXECSQLDELETEFROMstaffWHEREjob=:jobUpdate;(5) CHECKERR (DELETE FROM STAFF);f(AllSalespeoplehavebeend

16、eleted!n); EXEC SQL INSERTO staffVALUES (999, Testing, 99, :jobUpdate, 0, 0, 0);CHECKERR(INSERTO STAFF);f(Newdatahasbeeninsertedn); EXEC SQL ROLLBACK; (7) CHECKERR(ROLLBACK);f(Onsecondthought-changesrolledback.n); EXEC SQL CONNECT RESET;CHECKERR(CONNECTreturn/*endofprogram:UPDAT.SQCDELETE DELETE DEL

17、ETEFROMtable_name|view_nameWHERECURRENTOF clerk #include #include #include #include util.hEXECSQLINCLUDEif(check_error(CE_STR,&sqlca)!=0)return1; argc, char *argv) EXECSQLBEGINDECLAREchar userid9; charpasswd19;EXECSQLENDDECLAREf( SleCprogram:OPENFTCHn); if (argc = 1) EXECSQLCONNECTTORet=CHECKERR(CON

18、NECTTOIf (retelseif(argc=3)strcpy (userid, argv1); strcpy(passwd,argv2);EXECSQLCONNECTTOleUSER:useridUSINGCHECKERR(CONNECTTOelse f(nUSAGE:openftchEXECSQLCONNECTTOleUSER:useridUSINGCHECKERR(CONNECTTOelse f(nUSAGE:openftchuseridreturn/*endifEXECSQLDECLAREc1CURSORSELECTname,deptFROMstaffWHEREFORUPDATEO

19、FEXECSQLOPENCHECKERR(OPENdo EXECSQLFETCHO:pname,if(SQLCODE!=0)if(dept 40) f(%-10.10sindept.%2dwillbedemotedtopname,deptEXECSQLUPDATEstaffSETjob=WHERECURRENTOFelsef(%-10.10sindept.%2dwillbepname,EXECSQLDELETEFROMstaffWHERECURRENTOFCHECKERR/*endif在通過(guò)游標(biāo)進(jìn)行 UPDATE 和 DELETE 操作時(shí),相應(yīng)的游標(biāo)在定義時(shí)必須加上 3.2.5 SQL語(yǔ)句,就

20、返回一個(gè)狀態(tài)符和一些附加信息。這些信 sqlca.hsqlcaSQL在通過(guò)游標(biāo)進(jìn)行 UPDATE 和 DELETE 操作時(shí),相應(yīng)的游標(biāo)在定義時(shí)必須加上 3.2.5 SQL語(yǔ)句,就返回一個(gè)狀態(tài)符和一些附加信息。這些信 sqlca.hsqlcaSQL語(yǔ)句,則必須要在 一些語(yǔ)句:EXECSQLINCLUDESQLCA/*Eyecatcher=/*SQLCAsize inbytes=#ifdef/*SQLreturn/*SQLreturnwhile( 1EXEC SQL CLOSE c1; CHECKERR(CLOSECURSOR); EXEC SQL ROLLBACK; CHECKERR(ROLLB

21、ACK);f(nOnsecondthought-changesrolledback.n); EXEC SQL CONNECT RESET;CHECKERR(CONNECTreturn/*endofprogram:OPENFTCH.SQC/*Lengthfor/*Errormessage/*Diagnostic/*Diagnostic#ifdef/*ecorrespondingtoSQLCODE/*/*Lengthfor/*Errormessage/*Diagnostic/*Diagnostic#ifdef/*ecorrespondingtoSQLCODE/*ecorrespondingtoSQ

22、LCODESQLCA SqlcodeSQL語(yǔ)句執(zhí)行后的狀態(tài),0SQL執(zhí)行成功;sqlcode != 0) f(-errorreport-f(ERRORoccured:%s.nSQLCODE:%ldn,eString, /* 獲取E信息rc=sqlogstt(sBuffer,1024,80,er- Erc=p(eBuffer,1024,80,/*Erc中存放了eBuffer 的長(zhǎng)度*/ if (Erc 0) prf (%s, eBuffer);if (caPoer-sqlcode 0) if (rc = 0) f(n%s,f(-enderrorreport-n); return 1;else/*

23、 */ if (rc = 0) f(n%s,f(-enderrorreport-f(WARNING-CONTINUINGPROGRAMWITHreturn/*endif/*endif*/ return 0;。DB2 WHENEVER 3.2.6。DB2 WHENEVER 3.2.6 BEGINDECLAREENDDECLAREDECLAREINCLUDEINCLUDE COMMIT 操作的作用是,結(jié)束當(dāng)前的事務(wù),事務(wù)對(duì)數(shù)據(jù)庫(kù)所做的修改化。 3.3DB2SQL 圖6-嵌入SQL處理過(guò)piler的 C 程序源文件,它們和其他的 C pr圖6-嵌入SQL處理過(guò)piler的 C 程序源文件,它們和其他

24、的 C program以后,也生成為package文件。所謂package,實(shí)際上是SQL語(yǔ)句SQLSQLSQL語(yǔ)句是宿主語(yǔ)言編譯器SQL語(yǔ)句分離出來(lái),這 函數(shù)可以在函數(shù)執(zhí)行時(shí)數(shù)據(jù)庫(kù),然后將源文件中所有用于生成數(shù)據(jù)庫(kù)管理器的 1 db2connectto2db2prepadhoc.sqc。 C語(yǔ)言可以識(shí)別的APIBINDBINDFILE1 db2connectto2db2prepadhoc.sqc。 C語(yǔ)言可以識(shí)別的APIBINDBINDFILEBIND文件,BIND db2bind ,而不會(huì)報(bào)錯(cuò)。如果使用 PACKAGE 選項(xiàng),則生成 PACKAGE C C 語(yǔ)言的編譯器所識(shí)別。所以,SQL

25、 C 語(yǔ)言程序中,又引CINCLUDEDB2SDK setsetcl -o PACKAGE是DB2為SQL SQL DB2SQL PACKAGE PACKAGE,DB2 C 語(yǔ)言程序在生成可執(zhí)行程序時(shí),同樣也將時(shí)間戳傳遞下去。當(dāng)應(yīng)用程序運(yùn) iccharsqla_program_id40#includeicstructsqla_runtime_infosqla_rtinfoS,Q,L,A,R,T,I,N,sizeof(wchar_t),0,#line1demodb2.sqc #include #include #include #include util.h #include EXECSQLIN

26、CLUDE/*SQLCommunicationArea-SQLCA-structuresandconstants*/ #include sqlca.hstruct sqlca sqlca; #line6demodb2.sqcif(check_error(CE_STR,&sqlca)!=0)returncheck_error(chareString,structsqlcaer) charchar shortrc,ifer-sqlcode!=0)f(-check_error(chareString,structsqlcaer) charchar shortrc,ifer-sqlcode!=0)f(

27、-errorreport-f(ERRORoccured:%s.nSQLCODE:%ldn,returnargc,char*argv)EXECSQLBEGINDECLARE#line21charcharEXECSQLENDDECLARE#line25f(leCprogram:ICn if(argc=1)EXECSQLCONNECTTO#line28 #line28structsqla_setd_list#line28sql_setdlist0.sqltype=460;sql_setdlist0.sqllen=#line28 #line28structsqla_setd_list#line28sq

28、l_setdlist0.sqltype=460;sql_setdlist0.sqllen=#line28sql_setdlist0.sqldata=#line28sql_setdlist0.sqlind=#line28#line28 #line28#line28CHECKERR(CONNECTTOelseif(argc=3)strcpy(userid,strcpy(passwd,EXECSQLCONNECTTOleUSER:useridUSING#line34 #line34structsqla_setd_list#line34sql_setdlist0.sqltype=460;sql_set

29、dlist0.sqllen#line34 #line34structsqla_setd_list#line34sql_setdlist0.sqltype=460;sql_setdlist0.sqllen=#line34sql_setdlist0.sqldata=#line34sql_setdlist0.sqlind=#line34sql_setdlist1.sqltype=460;sql_setdlist1.sqllen=#line34sql_setdlist1.sqldata=#line34sql_setdlist1.sqlind=#line34sql_setdlist2.sqltype=4

30、60;sql_setdlist2.sqllen=#line34sql_setdlist2.sqldata=#line34sql_setdlist2.sqlind=#line34#line34 #line34#line34CHECKERR(CONNECTTOelse f(nUSAGE:icuseridreturn/*endif#line34CHECKERR(CONNECTTOelse f(nUSAGE:icuseridreturn/*endifEXECSQLOFROMWHERELASTNAME=#line44 #line44structsqla_setd_list#line44sql_setdl

31、ist0.sqltype=460;sql_setdlist0.sqllen=#line44sql_setdlist0.sqldata=#line44sql_setdlist0.sqlind=#line44#line44 #line44#line44CHECKERR(SELECTf(#line44 #line44#line44CHECKERR(SELECTf(name=nameEXECSQLCONNECT#line47 #line47 #line47#line47CHECKERR(CONNECTreturn/*endof program:IC.SQC 3.4DB2SQL 3.4DB2SQL 3.

32、4.1 1、PREPARESQLDB2中使用一個(gè)字符型SQL語(yǔ)句。但是,這條語(yǔ)句在預(yù)編譯時(shí)不存在,因而在預(yù)編譯時(shí)SQL語(yǔ)句。但是,存放在宿主變量中的語(yǔ)句必須轉(zhuǎn)化為可執(zhí)行的格式后才能 和OPEN 2EXECUTEPREPARE操作的SQLEXECUTE主變量傳遞,他們的類型應(yīng)該匹配。EXECUTE 命令不能做 SELECT 操作,這是因?yàn)?EXECUTE IMMEDIATE 語(yǔ)句是ARE語(yǔ)句和EXECUTE 語(yǔ)句的綜合,它對(duì)語(yǔ)句3 #include #include #include #include util.hEXECSQLINCLUDEif(check_error(CE_STR,&sqlc

33、a)!=0)return1; argc, char *argv) EXECSQLBEGINDECLARE charcharEXECSQLENDDECLAREf(leCprogram:DYNAMICnif(argc=charcharEXECSQLENDDECLAREf(leCprogram:DYNAMICnif(argc=1)EXECSQLCONNECTTOCHECKERR(CONNECTTOelseif(argc=3)strcpy(userid,strcpy(passwd,EXECSQLCONNECTTOleUSER:useridUSINGCHECKERR(CONNECTTOelse f(nU

34、SAGE:dynamicuseridreturn/*endifstrcpy(st,SELECTtabnameFROMsyscat.tablesstrcat(st,WHEREtabname? EXECSQLPREPAREs1FROMCHECKERREXECSQLDECLAREc1CURSORFOR EXECSQLOPENc1USING從上面這個(gè)例子看出,動(dòng)態(tài) SQL 語(yǔ)句同靜態(tài) SQL 語(yǔ)句的不同之處在于,要使用 3.4.2從上面這個(gè)例子看出,動(dòng)態(tài) SQL 語(yǔ)句同靜態(tài) SQL 語(yǔ)句的不同之處在于,要使用 3.4.2 1 EXEC SQL DECLARE c1 CURSOR FOR s1 2OPE

35、N SQLSQLDA 結(jié)構(gòu)中EXECSQLOPENc1USING3 FETCHSQLDACHECKERRdo EXEC SQL FETCH c1O:table_name; if (SQLCODE != 0) break;f(Table=%sn,table_namewhile( 1EXEC SQL CLOSE c1; CHECKERR(CLOSE); EXEC SQL COMMIT; CHECKERR(COMMIT); EXECSQLCONNECTRESET;CHECKERR(CONNECTreturn/*endofprogram:DYNAMIC.SQC EXECSQLFETCHO 3.4.3

36、1SQLDA /*Namelength/*Variableor EXECSQLFETCHO 3.4.3 1SQLDA /*Namelength/*VariableorColumn ERsqldata;/*ertovariabledataER/*ertoNullstructsqlname/*Eyecatcher=/*SQLDAsizein/*#ofcolumnsor hoststruct SQLDA6-4SQLDA SQLDA6-4SQLDA :SQLDA 開端的sqldaid sqld 為固定用于標(biāo)SQLDA,并規(guī)定這一特定的SQLDAsqlvarSQLDA 把參數(shù)送到執(zhí)行 SQLDA SQL

37、DA 開端的sqldaid sqld 為固定用于標(biāo)SQLDA,并規(guī)定這一特定的SQLDAsqlvarSQLDA 把參數(shù)送到執(zhí)行 SQLDA 16sqlvar44 。SQL SQLTYPE值 SQLTYPE SQL_TYP_TIME/SQL_TYP_CGSTR/SQL_TYP_BLOB/SQL_TYP_CLOB/SQL_TYP_DBCLOB/SQL_TYP_CHAR/LONGSQL_TYP_LONG/SQL_TYP_CSTR/ LONGSQL_TYP_LONGRAPH/ EGER/ SQL_TYP_DBCLOB_FILE/EGER/ SQL_TYP_DBCLOB_FILE/ OPENEXECUT

38、E 操作結(jié)合。請(qǐng) #include #include #include #include #include/*SQLDA結(jié)構(gòu)的定義#include #include util.h/*SQLCA 結(jié)構(gòu)的定義*/ EXECSQLINCLUDESQLCA;/*check_errorisafunctionheutil.cprogramcheck_error(CE_STR,&sqlca) E sqlca.sqlsinit_da(SQLDA/*為存放列數(shù)據(jù)的sd_column結(jié)構(gòu)申請(qǐng)空間*/ alloc_host_vars (SQLDA *sqldaPoSQLDA所申請(qǐng)的空間voidfree_da(SQL

39、DAchar*readColName(SQLDAer,shortsd_columnIndex,char*charSQLDA所申請(qǐng)的空間voidfree_da(SQLDAchar*readColName(SQLDAer,shortsd_columnIndex,char*char*readCol(SQLDAer,shortsd_columnIndex,char*/*SQL語(yǔ)句ement#defineMAX_COLUMNSmain(void)charcharchar EXECSQLBEGINDECLARESECTION;EXECSQLENDDECLAREleCprogram:eractive/* d

40、o f(inputtheserver(database)whichyouwishtoattachto: getsf(inputyouruserid:getsstrcpy(userid,f(inputyourpasswd:getsstrcpy(passwd, EXECSQLCONNECTTO:serverf(inputyourpasswd:getsstrcpy(passwd, EXECSQLCONNECTTO:serverUSER:useridUSING while(SQLCODE!=0);/*enddo /*Enterthedlineloop.while( 1) f(EnteranSQLeme

41、ntorquittoQuitgetsif(strcmp(sqlInput,quit)=0)elseif(strlen(sqlInput)=0)/*Dontsthe ementf(tNocharacterselseif(sqlInputstrlen(sqlInput)-1=)/* strcpy(st,do strncat(st,sqlInput,strlen(sqlInput)-getswhile(sqlInputstrlen(sqlInput)-1=strcat(st,/* SQL語(yǔ)句 rc= ementelsestrcpy(st,/* SQL語(yǔ)句rc= ement/*endif /*endw

42、hileelsestrcpy(st,/* SQL語(yǔ)句rc= ement/*endif /*endwhile f(EnterctoCOMMITorAnyOtherkeytoROLLBACKtheionion=ifion=c) f(COMMITINGtheEXECSQLCHECKERRelse/* 撤消語(yǔ)句的執(zhí)行結(jié)果f(ROLLINGBACKtheEXECSQLCHECKERR;/*endifEXECSQLCONNECTCHECKERR(CONNECTreturn* 函數(shù) *ThisfunctionsestheinputtedementandthenpreparesproceduralSQLion

43、totakeement(charsqlInput1000)counter=structsqldashortsqlda_d;/*Totalcolumnsshortchar char charcounter=structsqldashortsqlda_d;/*Totalcolumnsshortchar char char EXECSQLBEGINDECLAREcharEXECSQLENDDECLARE/*SQL語(yǔ)句strcpy(st,/* SQLDAinit_daer, ement1fromif(CHECKERR(PREPARE)!=0)return EXECSQLDESCRIBEO /* DES

44、CRIBE是否正確執(zhí)行if(SQLCODE!=0SQLCODE!=SQL_RC_W236SQLCODE!=SQL_RC_W237SQLCODE!=SQL_RC_W238SQLCODE!=SQL_RC_W239)/*Anunexpectedwarning/errorhasChecktheSQLCA.if(CHECKERR(DESCRIBE)!=0)return/*endif /*SQLDAsqld0SELECT語(yǔ)句,sqld值是列的個(gè)數(shù)ifer-sqld0) er,idx, er,idx,If (idx sqld*elseinit_daer,er-/*endif /* SQLDA 重新賦值EXE

45、C SQL DESCRIBE sO :*sqldaPoif(CHECKERR(DESCRIBE) != 0)return SQLCODE;/* 給SQLDA分配合適的內(nèi)存空間*/ alloc_host_vars (sqldaPo游標(biāo)EXECSQLDECLAREpcursCURSORFOREXECSQLif(CHECKERR(OPEN)!=0)return EXEC SQL FETCH pcurs USING DESCRIPTOR :*sqldaPoif (CHECKERR (FETCH) != 0) return SQLCODE;/* SQLDA中獲得列標(biāo)題信息,并顯示之*/ colnamel

46、ist0 = 0;for(idx=0;idxsqlda_d;while(SQLCODE=0)counter+for(idx=0;idxsqlda_d;er,while(SQLCODE=0)counter+for(idx=0;idxsqldaid,sizeofer)-sqldabc=er)-sqln=er)-sqld=return(-memseter,0,er)-sqldaid,sizeofer)-sqldabc=er)-sqln=er)-sqld=return*FUNCTION:*sqlvar結(jié)構(gòu)申請(qǐng)空間。返回-1alloc_host_vars(structsqldaer)shortmemsi

47、zelonglongmemsizefor(idx =0;idx sqld;idx+)switcher-sqlvaridx.sqltype)casecasecasecasecasecasecasecasecase:case:return(-elsememset/*return(-elsememset/*endif/*sqlind申請(qǐng)空間if( er-sqlvaridx.sqltype&1)/*Allocatestorageforer-sqlvaridx.sqlind=(short/*Detectmemoryallocationerrorif ( sqldaPoer-sqlvaridx.sqlin

48、d=NULL) return(-1) ;/*endswitchifer-sqlvaridx.sqldata=NULL)memsize=er-er-sqlvaridx.sqldata = (char *SQL_POmalloc (sqldaPomemsize = (sqldaPocasecase= (char *)&(sqldaPoer-sqlvaridx.sqldata=(charmalloc (preci+2)/2); memsize = (preci+2) /2; er-sqlvaridx.sqldata = (char *SQL_POmalloc (sqldaPoer-sqlvaridx

49、.sqltype=else /*initializememorytozeroer-/*endif /*endif /*else /*initializememorytozeroer-/*endif /*endif /*endfor return*FUNCTION:*SQLDA voidfree_da(structsqldaer)shortfor(idx =0;idx sqld;idx+)freeer-ifer-sqlvaridx.sqltype&1)free/*endforfree*PROCEDURE:* char*readColName(structsqldaer,shortsqlvarIndex,char*buffer) er-returnshortbuffer0=shortbuffer0=returndataptr = (

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論