diff options
Diffstat (limited to 'src/interfaces/cli/example1.c')
-rw-r--r-- | src/interfaces/cli/example1.c | 262 |
1 files changed, 132 insertions, 130 deletions
diff --git a/src/interfaces/cli/example1.c b/src/interfaces/cli/example1.c index 95dbeabd640..88d8d7f403f 100644 --- a/src/interfaces/cli/example1.c +++ b/src/interfaces/cli/example1.c @@ -13,7 +13,7 @@ */ /* - * B.1 Create table, insert, select + * B.1 Create table, insert, select * * This example function creates a table, inserts data into the table, * and selects the inserted data. @@ -37,135 +37,137 @@ #define NULL 0 #endif -int print_err(SQLSMALLINT handletype, SQLINTEGER handle); +int print_err(SQLSMALLINT handletype, SQLINTEGER handle); -int example1(SQLCHAR *server, SQLCHAR *uid, SQLCHAR *authen) +int +example1(SQLCHAR * server, SQLCHAR * uid, SQLCHAR * authen) { - SQLHENV henv; - SQLHDBC hdbc; - SQLHDESC hdesc; - SQLHDESC hdesc1; - SQLHDESC hdesc2; - SQLHSTMT hstmt; - SQLINTEGER id; - SQLSMALLINT idind; - SQLCHAR name[51]; - SQLINTEGER namelen; - SQLSMALLINT nameind; - - /* EXEC SQL CONNECT TO :server USER :uid; */ - - /* allocate an environment handle */ - SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); - /* allocate a connection handle */ - SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); - - /* connect to database */ - if (SQLConnect(hdbc, server, SQL_NTS, uid, SQL_NTS, - authen, SQL_NTS) - != SQL_SUCCESS) - return(print_err(SQL_HANDLE_DBC, hdbc)); - - /* allocate a statement handle */ - SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); - - /* EXEC SQL CREATE TABLE NAMEID (ID integer, NAME varchar(50)); */ - { - SQLCHAR create[] ="CREATE TABLE NAMEID (ID integer," - " NAME varchar(50))"; - - /* execute the CREATE TABLE statement */ - if (SQLExecDirect(hstmt, create, SQL_NTS) != SQL_SUCCESS) - return(print_err(SQL_HANDLE_STMT, hstmt)); - } - - /* EXEC SQL COMMIT WORK; */ - /* commit CREATE TABLE */ - SQLEndTran(SQL_HANDLE_ENV, henv, SQL_COMMIT); - /* EXEC SQL INSERT INTO NAMEID VALUES ( :id, :name ); */ - { - SQLCHAR insert[]= "INSERT INTO NAMEID VALUES (?, ?)"; - - /* show the use of SQLPrepare/SQLExecute method */ - /* prepare the INSERT */ - if (SQLPrepare(hstmt, insert, SQL_NTS) != SQL_SUCCESS) - return(print_err(SQL_HANDLE_STMT, hstmt)); - /* application parameter descriptor */ - SQLGetStmtAttr(hstmt, SQL_ATTR_APP_PARAM_ - DESC, &hdesc1, 0L, - (SQLINTEGER *)NULL); - SQLSetDescRec(hdesc1, 1, SQL_INTEGER, 0, 0L, 0, 0, - (SQLPOINTER)&id, (SQLINTEGER *)NULL, (SQLSMALLINT *)NULL); - SQLSetDescRec(hdesc1, 2, SQL_CHAR, 0, 0L, 0, 0, - (SQLPOINTER)name, (SQLINTEGER *)NULL, - (SQLSMALLINT *)NULL); - /* implementation parameter descriptor */ - SQLGetStmtAttr(hstmt, SQL_ATTR_IMP_PARAM_ - DESC, &hdesc2, 0L, - (SQLINTEGER *)NULL); - SQLSetDescRec(hdesc2, 1, SQL_INTEGER, 0, 0L, 0, 0, - (SQLPOINTER)NULL, (SQLINTEGER *)NULL, - (SQLSMALLINT *)NULL); - SQLSetDescRec(hdesc2, 2, SQL_VARCHAR, 0, 50L, 0, 0, - (SQLPOINTER)NULL, (SQLINTEGER *)NULL, - (SQLSMALLINT *)NULL); - - /* assign parameter values and execute the INSERT */ - id=500; - (void)strcpy(name, "Babbage"); - if (SQLExecute(hstmt) != SQL_SUCCESS) - return(print_err(SQL_HANDLE_STMT, hstmt)); - } - /* EXEC SQL COMMIT WORK; */ - SQLEndTran(SQL_HANDLE_ENV, henv, SQL_COMMIT); - /* commit inserts */ - - /* EXEC SQL DECLARE c1 CURSOR FOR SELECT ID, NAME FROM NAMEID; */ - /* EXEC SQL OPEN c1; */ - /* The application doesn't specify "declare c1 cursor for" */ - { - SQLCHAR select[]= "select ID, NAME from NAMEID"; - if (SQLExecDirect(hstmt, select, SQL_NTS) != SQL_SUCCESS) - return(print_err(SQL_HANDLE_STMT, hstmt)); - } - - /* EXEC SQL FETCH c1 INTO :id, :name; */ - /* this time, explicitly allocate an application row descriptor */ - SQLAllocHandle(SQL_HANDLE_DESC, hdbc, &hdesc); - SQLSetDescRec(hdesc, 1, SQL_INTEGER, 0, 0L, 0, 0, - (SQLPOINTER)&id, (SQLINTEGER *)NULL, (SQLSMALLINT *)&idind); - - SQLSetDescRec(hdesc, 2, SQL_ - CHAR, 0, (SQLINTEGER)sizeof(name), - 0, 0, (SQLPOINTER)&name, (SQLINTEGER *)&namelen, - (SQLSMALLINT *)&nameind); - /* associate descriptor with statement handle */ - SQLSetStmtAttr(hstmt, SQL_ATTR_APP_ROW_DESC, &hdesc, 0); - /* execute the fetch */ - SQLFetch(hstmt); - - /* EXEC SQL COMMIT WORK; */ - /* commit the transaction */ - SQLEndTran(SQL_HANDLE_ENV, henv, SQL_COMMIT); - - /* EXEC SQL CLOSE c1; */ - SQLClose(hstmt); - /* free the statement handle */ - SQLFreeHandle(SQL_HANDLE_STMT, hstmt); - - /* EXEC SQL DISCONNECT; */ - /* disconnect from the database */ - SQLDisconnect(hdbc); - /* free descriptor handle */ - SQLFreeHandle(SQL_HANDLE_DESC, hdesc); - /* free descriptor handle */ - SQLFreeHandle(SQL_HANDLE_DESC, hdesc1); - /* free descriptor handle */ - SQLFreeHandle(SQL_HANDLE_DESC, hdesc2); - /* free connection handle */ - SQLFreeHandle(SQL_HANDLE_DBC, hdbc); - /* free environment handle */ - SQLFreeHandle(SQL_HANDLE_ENV, henv); - - return(0); + SQLHENV henv; + SQLHDBC hdbc; + SQLHDESC hdesc; + SQLHDESC hdesc1; + SQLHDESC hdesc2; + SQLHSTMT hstmt; + SQLINTEGER id; + SQLSMALLINT idind; + SQLCHAR name[51]; + SQLINTEGER namelen; + SQLSMALLINT nameind; + + /* EXEC SQL CONNECT TO :server USER :uid; */ + + /* allocate an environment handle */ + SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); + /* allocate a connection handle */ + SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); + + /* connect to database */ + if (SQLConnect(hdbc, server, SQL_NTS, uid, SQL_NTS, + authen, SQL_NTS) + != SQL_SUCCESS) + return (print_err(SQL_HANDLE_DBC, hdbc)); + + /* allocate a statement handle */ + SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); + + /* EXEC SQL CREATE TABLE NAMEID (ID integer, NAME varchar(50)); */ + { + SQLCHAR create[] = "CREATE TABLE NAMEID (ID integer," + " NAME varchar(50))"; + + /* execute the CREATE TABLE statement */ + if (SQLExecDirect(hstmt, create, SQL_NTS) != SQL_SUCCESS) + return (print_err(SQL_HANDLE_STMT, hstmt)); + } + + /* EXEC SQL COMMIT WORK; */ + /* commit CREATE TABLE */ + SQLEndTran(SQL_HANDLE_ENV, henv, SQL_COMMIT); + /* EXEC SQL INSERT INTO NAMEID VALUES ( :id, :name ); */ + { + SQLCHAR insert[] = "INSERT INTO NAMEID VALUES (?, ?)"; + + /* show the use of SQLPrepare/SQLExecute method */ + /* prepare the INSERT */ + if (SQLPrepare(hstmt, insert, SQL_NTS) != SQL_SUCCESS) + return (print_err(SQL_HANDLE_STMT, hstmt)); + /* application parameter descriptor */ + SQLGetStmtAttr(hstmt, SQL_ATTR_APP_PARAM_ + DESC, &hdesc1, 0L, + (SQLINTEGER *) NULL); + SQLSetDescRec(hdesc1, 1, SQL_INTEGER, 0, 0L, 0, 0, + (SQLPOINTER) & id, (SQLINTEGER *) NULL, (SQLSMALLINT *) NULL); + SQLSetDescRec(hdesc1, 2, SQL_CHAR, 0, 0L, 0, 0, + (SQLPOINTER) name, (SQLINTEGER *) NULL, + (SQLSMALLINT *) NULL); + /* implementation parameter descriptor */ + SQLGetStmtAttr(hstmt, SQL_ATTR_IMP_PARAM_ + DESC, &hdesc2, 0L, + (SQLINTEGER *) NULL); + SQLSetDescRec(hdesc2, 1, SQL_INTEGER, 0, 0L, 0, 0, + (SQLPOINTER) NULL, (SQLINTEGER *) NULL, + (SQLSMALLINT *) NULL); + SQLSetDescRec(hdesc2, 2, SQL_VARCHAR, 0, 50L, 0, 0, + (SQLPOINTER) NULL, (SQLINTEGER *) NULL, + (SQLSMALLINT *) NULL); + + /* assign parameter values and execute the INSERT */ + id = 500; + (void) strcpy(name, "Babbage"); + if (SQLExecute(hstmt) != SQL_SUCCESS) + return (print_err(SQL_HANDLE_STMT, hstmt)); + } + /* EXEC SQL COMMIT WORK; */ + SQLEndTran(SQL_HANDLE_ENV, henv, SQL_COMMIT); + /* commit inserts */ + + /* EXEC SQL DECLARE c1 CURSOR FOR SELECT ID, NAME FROM NAMEID; */ + /* EXEC SQL OPEN c1; */ + /* The application doesn't specify "declare c1 cursor for" */ + { + SQLCHAR select[] = "select ID, NAME from NAMEID"; + + if (SQLExecDirect(hstmt, select, SQL_NTS) != SQL_SUCCESS) + return (print_err(SQL_HANDLE_STMT, hstmt)); + } + + /* EXEC SQL FETCH c1 INTO :id, :name; */ + /* this time, explicitly allocate an application row descriptor */ + SQLAllocHandle(SQL_HANDLE_DESC, hdbc, &hdesc); + SQLSetDescRec(hdesc, 1, SQL_INTEGER, 0, 0L, 0, 0, + (SQLPOINTER) & id, (SQLINTEGER *) NULL, (SQLSMALLINT *) & idind); + + SQLSetDescRec(hdesc, 2, SQL_ + CHAR, 0, (SQLINTEGER) sizeof(name), + 0, 0, (SQLPOINTER) & name, (SQLINTEGER *) & namelen, + (SQLSMALLINT *) & nameind); + /* associate descriptor with statement handle */ + SQLSetStmtAttr(hstmt, SQL_ATTR_APP_ROW_DESC, &hdesc, 0); + /* execute the fetch */ + SQLFetch(hstmt); + + /* EXEC SQL COMMIT WORK; */ + /* commit the transaction */ + SQLEndTran(SQL_HANDLE_ENV, henv, SQL_COMMIT); + + /* EXEC SQL CLOSE c1; */ + SQLClose(hstmt); + /* free the statement handle */ + SQLFreeHandle(SQL_HANDLE_STMT, hstmt); + + /* EXEC SQL DISCONNECT; */ + /* disconnect from the database */ + SQLDisconnect(hdbc); + /* free descriptor handle */ + SQLFreeHandle(SQL_HANDLE_DESC, hdesc); + /* free descriptor handle */ + SQLFreeHandle(SQL_HANDLE_DESC, hdesc1); + /* free descriptor handle */ + SQLFreeHandle(SQL_HANDLE_DESC, hdesc2); + /* free connection handle */ + SQLFreeHandle(SQL_HANDLE_DBC, hdbc); + /* free environment handle */ + SQLFreeHandle(SQL_HANDLE_ENV, henv); + + return (0); } |