1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
| # include <windows.h>
# include <stdio.h>
# include <sql.h>
# include <sqlext.h>
static void geterror( HSTMT );
#define RC_SUCCESS(rc) (((rc)==SQL_SUCCESS) || ((rc) == SQL_SUCCESS_WITH_INFO))
/* env et connection */
SQLHENV Henv ;
SQLHDBC Hdbc ;
char req0[] = "select A.IDENTITYCOL from X3.ZZBLOB A where A. NUM_0 = 1" ;
main () {
/* Declaration */
RETCODE rc ;
SQLHSTMT hStmt0 ;
/* variable de retours Bind */
SQLINTEGER pcb[1] ;
SQLINTEGER id ;
/* ************************************ */
/* Environement et connection */
rc = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &Henv);
if (!RC_SUCCESS( rc ))
geterror( SQL_NULL_HSTMT ) ;
rc = SQLSetEnvAttr(Henv, SQL_ATTR_ODBC_VERSION,
(SQLPOINTER) SQL_OV_ODBC3, SQL_IS_INTEGER);
if (!RC_SUCCESS( rc ))
geterror( SQL_NULL_HSTMT ) ;
rc = SQLAllocHandle(SQL_HANDLE_DBC, Henv, &Hdbc);
if (!RC_SUCCESS( rc ))
geterror( SQL_NULL_HSTMT ) ;
rc = SQLConnect(Hdbc, "HERCULE2000", SQL_NTS, "X3", SQL_NTS, "tiger", SQL_NTS);
if (!RC_SUCCESS( rc ))
geterror( SQL_NULL_HSTMT ) ;
rc = SQLSetConnectAttr(Hdbc, SQL_ATTR_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF, SQL_IS_UINTEGER);
if (!RC_SUCCESS( rc ))
geterror( SQL_NULL_HSTMT ) ;
rc = SQLSetConnectAttr(Hdbc, SQL_ATTR_TXN_ISOLATION,
(SQLPOINTER) SQL_TXN_READ_COMMITTED, SQL_IS_UINTEGER);
if (!RC_SUCCESS( rc ))
geterror( SQL_NULL_HSTMT ) ;
rc = SQLEndTran( SQL_HANDLE_DBC, Hdbc, SQL_COMMIT ) ;
if (!RC_SUCCESS( rc ))
geterror( SQL_NULL_HSTMT ) ;
/* ************************************* */
rc = SQLAllocHandle(SQL_HANDLE_STMT, Hdbc, &hStmt0);
if (!RC_SUCCESS( rc ))
geterror( SQL_NULL_HSTMT ) ;
rc = SQLPrepare( hStmt0, req0, SQL_NTS ) ;
if (!RC_SUCCESS( rc ))
geterror( hStmt0 ) ;
rc = SQLBindCol( hStmt0, 1, SQL_C_SLONG, &id, 0, pcb );
if (!RC_SUCCESS( rc ))
geterror( hStmt0 ) ;
rc = SQLExecute( hStmt0 ) ;
if (!RC_SUCCESS( rc ))
geterror( hStmt0 ) ;
rc = SQLFetch( hStmt0 ) ;
if (!RC_SUCCESS( rc ))
geterror( hStmt0 ) ;
rc = SQLFreeHandle(SQL_HANDLE_STMT, hStmt0);
if (!RC_SUCCESS( rc ))
geterror( hStmt0 ) ;
/* ************************************* */
/* Deconnection */
rc = SQLEndTran( SQL_HANDLE_DBC, Hdbc, SQL_COMMIT ) ;
if (!RC_SUCCESS( rc ))
geterror( SQL_NULL_HSTMT ) ;
/* ********************************** */
/* c'est fini ! Free stmt */
rc = SQLDisconnect( Hdbc );
if (!RC_SUCCESS( rc ))
geterror( SQL_NULL_HSTMT ) ;
SQLFreeHandle(SQL_HANDLE_DBC, Hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, Henv);
return( 0 ) ;
}
static void geterror( HSTMT hStmt )
{
char msg[256] ; /* pointer to message */
RETCODE rc; /* code erreur retour */
char szSqlState[6]; /* etat de retour */
long noError; /* no de message */
short cbmsg;
rc = SQLError(Henv, Hdbc, hStmt, szSqlState, &noError, msg, 256, &cbmsg);
printf( msg ) ;
exit( 0 );
} |
Partager