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

📄 hstmt.c

📁 一个可以替代windows ODBC驱动程序管理器的通用ODBC数据库引擎
💻 C
📖 第 1 页 / 共 2 页
字号:
      /* delet this object (ignore return) */      _iodbcdm_dropstmt (pstmt);      break;    case SQL_CLOSE:      pstmt->cursor_state = en_stmt_cursor_no;      /* This means cursor name set by       * SQLSetCursorName() call will also        * be erased.       */      switch (pstmt->state)	{	case en_stmt_allocated:	case en_stmt_prepared:	  break;	case en_stmt_executed:	case en_stmt_cursoropen:	case en_stmt_fetched:	case en_stmt_xfetched:	  if (pstmt->prep_state)	    {	      pstmt->state = en_stmt_prepared;	    }	  else	    {	      pstmt->state = en_stmt_allocated;	    }	  break;	default:	  break;	}      break;    case SQL_UNBIND:    case SQL_RESET_PARAMS:    default:      break;    }  ODBC_UNLOCK ();  return retcode;}SQLRETURN SQL_API SQLSetStmtOption (    SQLHSTMT hstmt,    SQLUSMALLINT fOption,    SQLUINTEGER vParam){  STMT (pstmt, hstmt);  HPROC hproc;  int sqlstat = en_00000;  SQLRETURN retcode;  ENTER_STMT (pstmt);#if (ODBCVER < 0x0300)  /* check option */  if (				/* fOption < SQL_STMT_OPT_MIN || */      fOption > SQL_STMT_OPT_MAX)    {      PUSHSQLERR (pstmt->herr, en_S1092);      LEAVE_STMT (pstmt, SQL_ERROR);    }#endif	/* ODBCVER < 0x0300 */  if (fOption == SQL_CONCURRENCY      || fOption == SQL_CURSOR_TYPE      || fOption == SQL_SIMULATE_CURSOR      || fOption == SQL_USE_BOOKMARKS)    {      if (pstmt->asyn_on != en_NullProc)	{	  if (pstmt->prep_state)	    {	      sqlstat = en_S1011;	    }	}      else	{	  switch (pstmt->state)	     {	     case en_stmt_prepared:	       sqlstat = en_S1011;	       break;	     case en_stmt_executed:	     case en_stmt_cursoropen:	     case en_stmt_fetched:	     case en_stmt_xfetched:	       sqlstat = en_24000;	       break;	     case en_stmt_needdata:	     case en_stmt_mustput:	     case en_stmt_canput:	       if (pstmt->prep_state)		 {		   sqlstat = en_S1011;		 }	       break;	     default:	       break;	     }	}    }  else    {      if (pstmt->asyn_on != en_NullProc)	{	  if (!pstmt->prep_state)	    {	      sqlstat = en_S1010;	    }	}      else	{	  if (pstmt->state >= en_stmt_needdata)	    {	      sqlstat = en_S1010;	    }	}    }  if (sqlstat != en_00000)    {      PUSHSQLERR (pstmt->herr, sqlstat);      LEAVE_STMT (pstmt, SQL_ERROR);    }#if (ODBCVER >= 0x0300)  hproc = _iodbcdm_getproc (pstmt->hdbc, en_SetStmtAttr);  if (hproc != SQL_NULL_HPROC)    {      switch (fOption)	{	/* ODBC integer attributes */   	  case SQL_ATTR_ASYNC_ENABLE:	  case SQL_ATTR_CONCURRENCY:	  case SQL_ATTR_CURSOR_TYPE:	  case SQL_ATTR_KEYSET_SIZE:	  case SQL_ATTR_MAX_LENGTH:	  case SQL_ATTR_MAX_ROWS:	  case SQL_ATTR_NOSCAN:	  case SQL_ATTR_QUERY_TIMEOUT:	  case SQL_ATTR_RETRIEVE_DATA:	  case SQL_ATTR_ROW_BIND_TYPE:	  case SQL_ATTR_ROW_NUMBER:	  case SQL_ATTR_SIMULATE_CURSOR:	  case SQL_ATTR_USE_BOOKMARKS:	      CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, en_SetStmtAttr,		  (pstmt->dhstmt, fOption, vParam, 0));	      break;	  	/* ODBC3 attributes */   	  case SQL_ATTR_APP_PARAM_DESC:	  case SQL_ATTR_APP_ROW_DESC:	  case SQL_ATTR_CURSOR_SCROLLABLE:	  case SQL_ATTR_CURSOR_SENSITIVITY:	  case SQL_ATTR_ENABLE_AUTO_IPD:	  case SQL_ATTR_FETCH_BOOKMARK_PTR:	  case SQL_ATTR_IMP_PARAM_DESC:	  case SQL_ATTR_IMP_ROW_DESC:	  case SQL_ATTR_METADATA_ID:	  case SQL_ATTR_PARAM_BIND_OFFSET_PTR:	  case SQL_ATTR_PARAM_BIND_TYPE:	  case SQL_ATTR_PARAM_STATUS_PTR:	  case SQL_ATTR_PARAMS_PROCESSED_PTR:	  case SQL_ATTR_PARAMSET_SIZE:	  case SQL_ATTR_ROW_ARRAY_SIZE:	  case SQL_ATTR_ROW_BIND_OFFSET_PTR:	  case SQL_ATTR_ROW_OPERATION_PTR:	  case SQL_ATTR_ROW_STATUS_PTR:	  case SQL_ATTR_ROWS_FETCHED_PTR:	      PUSHSQLERR (pstmt->herr, en_IM001);	      LEAVE_STMT (pstmt, SQL_ERROR);	  default:	      CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, en_SetStmtAttr,		  (pstmt->dhstmt, fOption, vParam, SQL_NTS));	}    }  else#endif    {      hproc = _iodbcdm_getproc (pstmt->hdbc, en_SetStmtOption);      if (hproc == SQL_NULL_HPROC)	{	  PUSHSQLERR (pstmt->herr, en_IM001);	  LEAVE_STMT (pstmt, SQL_ERROR);	}      CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, en_SetStmtOption,	  (pstmt->dhstmt, fOption, vParam));    }  LEAVE_STMT (pstmt, retcode);}SQLRETURN SQL_API SQLGetStmtOption (    SQLHSTMT hstmt,    SQLUSMALLINT fOption,    SQLPOINTER pvParam){  STMT (pstmt, hstmt);  HPROC hproc;  int sqlstat = en_00000;  SQLRETURN retcode;  ENTER_STMT (pstmt);#if (ODBCVER < 0x0300)  /* check option */  if (				/* fOption < SQL_STMT_OPT_MIN || */      fOption > SQL_STMT_OPT_MAX)    {      PUSHSQLERR (pstmt->herr, en_S1092);      LEAVE_STMT (pstmt, SQL_ERROR);    }#endif /* ODBCVER < 0x0300 */  /* check state */  if (pstmt->state >= en_stmt_needdata || pstmt->asyn_on != en_NullProc)    {      sqlstat = en_S1010;    }  else    {      switch (pstmt->state)	{	case en_stmt_allocated:	case en_stmt_prepared:	case en_stmt_executed:	case en_stmt_cursoropen:	  if (fOption == SQL_ROW_NUMBER || fOption == SQL_GET_BOOKMARK)	    {	      sqlstat = en_24000;	    }	  break;	default:	  break;	}    }  if (sqlstat != en_00000)    {      PUSHSQLERR (pstmt->herr, sqlstat);      LEAVE_STMT (pstmt, SQL_ERROR);    }#if (ODBCVER >= 0x0300)  hproc = _iodbcdm_getproc (pstmt->hdbc, en_GetStmtAttr);  if (hproc != SQL_NULL_HPROC)    {      switch (fOption)	{	  /* ODBC integer attributes */	case SQL_ATTR_ASYNC_ENABLE:	case SQL_ATTR_CONCURRENCY:	case SQL_ATTR_CURSOR_TYPE:	case SQL_ATTR_KEYSET_SIZE:	case SQL_ATTR_MAX_LENGTH:	case SQL_ATTR_MAX_ROWS:	case SQL_ATTR_NOSCAN:	case SQL_ATTR_QUERY_TIMEOUT:	case SQL_ATTR_RETRIEVE_DATA:	case SQL_ATTR_ROW_BIND_TYPE:	case SQL_ATTR_ROW_NUMBER:	case SQL_ATTR_SIMULATE_CURSOR:	case SQL_ATTR_USE_BOOKMARKS:	  CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, en_GetStmtAttr,	      (pstmt->dhstmt, fOption, pvParam, 0, NULL));	  break;	  /* ODBC3 attributes */	case SQL_ATTR_APP_PARAM_DESC:	case SQL_ATTR_APP_ROW_DESC:	case SQL_ATTR_CURSOR_SCROLLABLE:	case SQL_ATTR_CURSOR_SENSITIVITY:	case SQL_ATTR_ENABLE_AUTO_IPD:	case SQL_ATTR_FETCH_BOOKMARK_PTR:	case SQL_ATTR_IMP_PARAM_DESC:	case SQL_ATTR_IMP_ROW_DESC:	case SQL_ATTR_METADATA_ID:	case SQL_ATTR_PARAM_BIND_OFFSET_PTR:	case SQL_ATTR_PARAM_BIND_TYPE:	case SQL_ATTR_PARAM_STATUS_PTR:	case SQL_ATTR_PARAMS_PROCESSED_PTR:	case SQL_ATTR_PARAMSET_SIZE:	case SQL_ATTR_ROW_ARRAY_SIZE:	case SQL_ATTR_ROW_BIND_OFFSET_PTR:	case SQL_ATTR_ROW_OPERATION_PTR:	case SQL_ATTR_ROW_STATUS_PTR:	case SQL_ATTR_ROWS_FETCHED_PTR:	  PUSHSQLERR (pstmt->herr, en_IM001);	  LEAVE_STMT (pstmt, SQL_ERROR);	default:	  CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, en_GetStmtAttr,	      (pstmt->dhstmt, fOption, pvParam, SQL_MAX_OPTION_STRING_LENGTH,		  NULL));	  break;	}    }  else#endif    {      hproc = _iodbcdm_getproc (pstmt->hdbc, en_GetStmtOption);      if (hproc == SQL_NULL_HPROC)	{	  PUSHSQLERR (pstmt->herr, en_IM001);	  LEAVE_STMT (pstmt, SQL_ERROR);	}      CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, en_GetStmtOption,	  (pstmt->dhstmt, fOption, pvParam));    }  LEAVE_STMT (pstmt, retcode);}SQLRETURN SQL_API SQLCancel (SQLHSTMT hstmt){  STMT (pstmt, hstmt);  HPROC hproc;  SQLRETURN retcode;  ENTER_STMT (pstmt);  /* check argument */  /* check state */  /* call driver */  hproc = _iodbcdm_getproc (pstmt->hdbc, en_Cancel);  if (hproc == SQL_NULL_HPROC)    {      PUSHSQLERR (pstmt->herr, en_IM001);      LEAVE_STMT (pstmt, SQL_ERROR);    }  CALL_DRIVER (pstmt->hdbc, pstmt, retcode, hproc, en_Cancel,      (pstmt->dhstmt));  /* state transition */  if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)    {      LEAVE_STMT (pstmt, retcode);    }  switch (pstmt->state)    {    case en_stmt_allocated:    case en_stmt_prepared:      break;    case en_stmt_executed:      if (pstmt->prep_state)	{	  pstmt->state = en_stmt_prepared;	}      else	{	  pstmt->state = en_stmt_allocated;	}      break;    case en_stmt_cursoropen:    case en_stmt_fetched:    case en_stmt_xfetched:      if (pstmt->prep_state)	{	  pstmt->state = en_stmt_prepared;	}      else	{	  pstmt->state = en_stmt_allocated;	}      break;    case en_stmt_needdata:    case en_stmt_mustput:    case en_stmt_canput:      switch (pstmt->need_on)	{	case en_ExecDirect:	  pstmt->state = en_stmt_allocated;	  break;	case en_Execute:	  pstmt->state = en_stmt_prepared;	  break;	case en_SetPos:	  pstmt->state = en_stmt_xfetched;	  break;	default:	  break;	}      pstmt->need_on = en_NullProc;      break;    default:      break;    }  LEAVE_STMT (pstmt, retcode);}

⌨️ 快捷键说明

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