⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cursor3.c

📁 在Linux/Unix下面访问WINDOWS SQLSERVER 的ODBC驱动程序
💻 C
字号:
/* Tests 2 active statements */#include "common.h"static char software_version[] = "$Id: cursor3.c,v 1.3.2.1 2008/01/11 08:33:18 freddy77 Exp $";static void *no_unused_var_warn[] = { software_version, no_unused_var_warn };static SQLHDBC m_hdbc;#define CHECK_RCODE(t,h,m) \   if ( rcode != SQL_NO_DATA \     && rcode != SQL_SUCCESS \     && rcode != SQL_SUCCESS_WITH_INFO  \     && rcode != SQL_NEED_DATA ) { \      fprintf(stderr,"Error %d at: %s\n",rcode,m); \      getErrorInfo(t,h); \      exit(1); \   }static voidgetErrorInfo(SQLSMALLINT sqlhdltype, SQLHANDLE sqlhandle){	SQLRETURN rcode = 0;	SQLCHAR sqlstate[SQL_SQLSTATE_SIZE + 1];	SQLINTEGER naterror = 0;	SQLCHAR msgtext[SQL_MAX_MESSAGE_LENGTH + 1];	SQLSMALLINT msgtextl = 0;	rcode = SQLGetDiagRec((SQLSMALLINT) sqlhdltype,			      (SQLHANDLE) sqlhandle,			      (SQLSMALLINT) 1,			      (SQLCHAR *) sqlstate,			      (SQLINTEGER *) & naterror,			      (SQLCHAR *) msgtext, (SQLSMALLINT) sizeof(msgtext), (SQLSMALLINT *) & msgtextl);	fprintf(stderr, "Diagnostic info:\n");	fprintf(stderr, "  SQL State: %s\n", (char *) sqlstate);	fprintf(stderr, "  SQL code : %d\n", (int) naterror);	fprintf(stderr, "  Message  : %s\n", (char *) msgtext);}static voidexec_direct(int check, const char *stmt){	SQLRETURN rcode;	SQLHSTMT stmth = 0;	rcode = SQLAllocHandle(SQL_HANDLE_STMT, (SQLHANDLE) m_hdbc, (SQLHANDLE *) & stmth);	CHECK_RCODE(SQL_HANDLE_STMT, stmth, "SQLAllocHandle");	rcode = SQLExecDirect(stmth, (SQLCHAR *) stmt, SQL_NTS);	if (check) {		CHECK_RCODE(SQL_HANDLE_STMT, stmth, "SQLExecDirect");	}	rcode = SQLFreeHandle(SQL_HANDLE_STMT, (SQLHANDLE) stmth);	CHECK_RCODE(SQL_HANDLE_STMT, stmth, "SQLFreeHandle");}intmain(int argc, char **argv){	SQLRETURN rcode;	SQLHSTMT m_hstmt1;	SQLHSTMT m_hstmt2;	char buff[64];	SQLLEN ind;	use_odbc_version3 = 1;	Connect();	CheckCursor();	m_hdbc = Connection;	exec_direct(1, "CREATE TABLE #t1 ( k INT, c VARCHAR(20))");	exec_direct(1, "INSERT INTO #t1 VALUES (1, 'aaa')");	exec_direct(1, "INSERT INTO #t1 VALUES (2, 'bbbbb')");	exec_direct(1, "INSERT INTO #t1 VALUES (3, 'ccccccccc')");	exec_direct(1, "INSERT INTO #t1 VALUES (4, 'dd')");	m_hstmt1 = NULL;	rcode = SQLAllocHandle(SQL_HANDLE_STMT, m_hdbc, &m_hstmt1);	CHECK_RCODE(SQL_HANDLE_DBC, m_hdbc, "SQLAllocHandle 1");	m_hstmt2 = NULL;	rcode = SQLAllocHandle(SQL_HANDLE_STMT, m_hdbc, &m_hstmt2);	CHECK_RCODE(SQL_HANDLE_DBC, m_hdbc, "SQLAllocHandle 2");/*	rcode = SQLSetStmtAttr(m_hstmt1, SQL_ATTR_CURSOR_SCROLLABLE, (SQLPOINTER) SQL_NONSCROLLABLE, SQL_IS_UINTEGER);	CHECK_RCODE(SQL_HANDLE_STMT,m_hstmt1,"Set attribute SQL_ATTR_CURSOR_SCROLLABLE 1");*/	rcode = SQLSetStmtAttr(m_hstmt1, SQL_ATTR_CURSOR_SENSITIVITY, (SQLPOINTER) SQL_SENSITIVE, SQL_IS_UINTEGER);	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "Set attribute SQL_ATTR_CURSOR_SENSITIVITY 1");/*	rcode = SQLSetStmtAttr(m_hstmt2, SQL_ATTR_CURSOR_SCROLLABLE, (SQLPOINTER) SQL_NONSCROLLABLE, SQL_IS_UINTEGER);	CHECK_RCODE(SQL_HANDLE_STMT,m_hstmt2,"Set attribute SQL_ATTR_CURSOR_SCROLLABLE 2");*/	rcode = SQLSetStmtAttr(m_hstmt2, SQL_ATTR_CURSOR_SENSITIVITY, (SQLPOINTER) SQL_SENSITIVE, SQL_IS_UINTEGER);	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt2, "Set attribute SQL_ATTR_CURSOR_SENSITIVITY 2");/*	rcode = SQLSetStmtAttr(m_hstmt1, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_LOCK, SQL_IS_UINTEGER);	CHECK_RCODE(SQL_HANDLE_STMT,m_hstmt1,"Set attribute SQL_ATTR_CONCURRENCY 1");	rcode = SQLSetStmtAttr(m_hstmt2, SQL_ATTR_CONCURRENCY, (SQLPOINTER) SQL_CONCUR_LOCK, SQL_IS_UINTEGER);	CHECK_RCODE(SQL_HANDLE_STMT,m_hstmt2,"Set attribute SQL_ATTR_CONCURRENCY 2");*/	rcode = SQLSetCursorName(m_hstmt1, (SQLCHAR *) "c1", SQL_NTS);	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "SetCursorName c1");	rcode = SQLSetCursorName(m_hstmt2, (SQLCHAR *) "c2", SQL_NTS);	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt2, "SetCursorName c2");	rcode = SQLPrepare(m_hstmt1, (SQLCHAR *) "SELECT * FROM #t1", SQL_NTS);	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "Prepare 1");	rcode = SQLPrepare(m_hstmt2, (SQLCHAR *) "SELECT * FROM #t1", SQL_NTS);	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt2, "Prepare 2");	rcode = SQLExecute(m_hstmt1);	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "SQLExecute 1");	rcode = SQLExecute(m_hstmt2);	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt2, "SQLExecute 2");	rcode = SQLFetch(m_hstmt1);	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "SQLFetch 1");	rcode = SQLGetData(m_hstmt1, 2, SQL_C_CHAR, (SQLPOINTER) buff, sizeof(buff), &ind);	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "SQLGetData 1");	fprintf(stdout, ">> Fetch from 1: [%s]\n", buff);	rcode = SQLFetch(m_hstmt2);	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt2, "SQLFetch 2");	rcode = SQLGetData(m_hstmt2, 2, SQL_C_CHAR, (SQLPOINTER) buff, sizeof(buff), &ind);	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt2, "SQLGetData 2");	fprintf(stdout, ">> Fetch from 2: [%s]\n", buff);	rcode = SQLCloseCursor(m_hstmt1);	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "SQLCloseCursor 1");	rcode = SQLCloseCursor(m_hstmt2);	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt2, "SQLCloseCursor 2");	rcode = SQLFreeHandle(SQL_HANDLE_STMT, (SQLHANDLE) m_hstmt1);	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "SQLFreeHandle 1");	rcode = SQLFreeHandle(SQL_HANDLE_STMT, (SQLHANDLE) m_hstmt2);	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt2, "SQLFreeHandle 2");	Disconnect();	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -