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

📄 statement.cpp

📁 絲路server源碼 Silk Road server source
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			(ODBCXX_SQLCHAR*) ODBCXX_STRING_DATA(types),			ODBCXX_STRING_LEN(types));  this->_checkStmtError(hstmt_,r,ODBCXX_STRING_CONST("Error fetching table information"));  this->_afterExecute();  ResultSet* rs=this->_getResultSet(true);  return rs;}ResultSet* Statement::_getTablePrivileges(const ODBCXX_STRING& catalog,					  const ODBCXX_STRING& schema,					  const ODBCXX_STRING& tableName){  this->_beforeExecute();  SQLRETURN r=SQLTablePrivileges(hstmt_,				 valueOrNull(catalog),				 ODBCXX_STRING_LEN(catalog),				 valueOrNull(schema),				 ODBCXX_STRING_LEN(schema),				 (ODBCXX_SQLCHAR*) ODBCXX_STRING_DATA(tableName),				 ODBCXX_STRING_LEN(tableName));  this->_checkStmtError(hstmt_,r,ODBCXX_STRING_CONST("Error fetching table privileges information"));  this->_afterExecute();  ResultSet* rs=this->_getResultSet(true);  return rs;}ResultSet* Statement::_getColumnPrivileges(const ODBCXX_STRING& catalog,					   const ODBCXX_STRING& schema,					   const ODBCXX_STRING& tableName,					   const ODBCXX_STRING& columnName){  this->_beforeExecute();  SQLRETURN r=SQLColumnPrivileges(hstmt_,				  valueOrNull(catalog),				  ODBCXX_STRING_LEN(catalog),				  valueOrNull(schema),				  ODBCXX_STRING_LEN(schema),				  (ODBCXX_SQLCHAR*) ODBCXX_STRING_DATA(tableName),				  ODBCXX_STRING_LEN(tableName),				  (ODBCXX_SQLCHAR*) ODBCXX_STRING_DATA(columnName),				  ODBCXX_STRING_LEN(columnName));  this->_checkStmtError(hstmt_,r,ODBCXX_STRING_CONST("Error fetching column privileges information"));  this->_afterExecute();  ResultSet* rs=this->_getResultSet(true);  return rs;}ResultSet* Statement::_getPrimaryKeys(const ODBCXX_STRING& catalog,				      const ODBCXX_STRING& schema,				      const ODBCXX_STRING& tableName){  this->_beforeExecute();  SQLRETURN r=SQLPrimaryKeys(hstmt_,			     valueOrNull(catalog),			     ODBCXX_STRING_LEN(catalog),			     valueOrNull(schema),			     ODBCXX_STRING_LEN(schema),			     (ODBCXX_SQLCHAR*) ODBCXX_STRING_DATA(tableName),			     ODBCXX_STRING_LEN(tableName));  this->_checkStmtError(hstmt_,r,ODBCXX_STRING_CONST("Error fetching primary keys information"));  this->_afterExecute();  ResultSet* rs=this->_getResultSet(true);  return rs;}ResultSet* Statement::_getCrossReference(const ODBCXX_STRING& pc,					 const ODBCXX_STRING& ps,					 const ODBCXX_STRING& pt,					 const ODBCXX_STRING& fc,					 const ODBCXX_STRING& fs,					 const ODBCXX_STRING& ft){  this->_beforeExecute();  SQLRETURN r=SQLForeignKeys(hstmt_,			     valueOrNull(pc),			     ODBCXX_STRING_LEN(pc),			     valueOrNull(ps),			     ODBCXX_STRING_LEN(ps),			     (ODBCXX_SQLCHAR*) ODBCXX_STRING_DATA(pt),			     ODBCXX_STRING_LEN(pt),			     valueOrNull(fc),			     ODBCXX_STRING_LEN(fc),			     valueOrNull(fs),			     ODBCXX_STRING_LEN(fs),			     (ODBCXX_SQLCHAR*) ODBCXX_STRING_DATA(ft),			     ODBCXX_STRING_LEN(ft));  this->_checkStmtError(hstmt_,r,ODBCXX_STRING_CONST("Error fetching foreign keys information"));  this->_afterExecute();  ResultSet* rs=this->_getResultSet(true);  return rs;}ResultSet* Statement::_getIndexInfo(const ODBCXX_STRING& catalog,				    const ODBCXX_STRING& schema,				    const ODBCXX_STRING& tableName,				    bool unique, bool approximate){  this->_beforeExecute();  SQLRETURN r=SQLStatistics(hstmt_,			    valueOrNull(catalog),			    ODBCXX_STRING_LEN(catalog),			    valueOrNull(schema),			    ODBCXX_STRING_LEN(schema),			    (ODBCXX_SQLCHAR*) ODBCXX_STRING_DATA(tableName),			    ODBCXX_STRING_LEN(tableName),			    unique?SQL_INDEX_UNIQUE:SQL_INDEX_ALL,			    approximate?SQL_QUICK:SQL_ENSURE);  this->_checkStmtError(hstmt_,r,ODBCXX_STRING_CONST("Error fetching index information"));  this->_afterExecute();  ResultSet* rs=this->_getResultSet(true);  return rs;}ResultSet* Statement::_getProcedures(const ODBCXX_STRING& catalog,				     const ODBCXX_STRING& schema,				     const ODBCXX_STRING& procName){  this->_beforeExecute();  SQLRETURN r=SQLProcedures(hstmt_,			    valueOrNull(catalog),			    ODBCXX_STRING_LEN(catalog),			    valueOrNull(schema),			    ODBCXX_STRING_LEN(schema),			    (ODBCXX_SQLCHAR*) ODBCXX_STRING_DATA(procName),			    ODBCXX_STRING_LEN(procName));  this->_checkStmtError(hstmt_,r,ODBCXX_STRING_CONST("Error fetching procedures information"));  ResultSet* rs=this->_getResultSet(true);  return rs;}ResultSet* Statement::_getProcedureColumns(const ODBCXX_STRING& catalog,					   const ODBCXX_STRING& schema,					   const ODBCXX_STRING& procName,					   const ODBCXX_STRING& colName){  this->_beforeExecute();  SQLRETURN r=SQLProcedureColumns(hstmt_,				  valueOrNull(catalog),				  ODBCXX_STRING_LEN(catalog),				  valueOrNull(schema),				  ODBCXX_STRING_LEN(schema),				  (ODBCXX_SQLCHAR*) ODBCXX_STRING_DATA(procName),				  ODBCXX_STRING_LEN(procName),				  (ODBCXX_SQLCHAR*) ODBCXX_STRING_DATA(colName),				  ODBCXX_STRING_LEN(colName));  this->_checkStmtError(hstmt_,r,ODBCXX_STRING_CONST("Error fetching procedures information"));  ResultSet* rs=this->_getResultSet(true);  return rs;}ResultSet* Statement::_getSpecialColumns(const ODBCXX_STRING& catalog,					 const ODBCXX_STRING& schema,					 const ODBCXX_STRING& table,					 int what, int scope,					 int nullable){  this->_beforeExecute();  SQLRETURN r=SQLSpecialColumns(hstmt_,what,				valueOrNull(catalog),				ODBCXX_STRING_LEN(catalog),				valueOrNull(schema),				ODBCXX_STRING_LEN(schema),				(ODBCXX_SQLCHAR*) ODBCXX_STRING_DATA(table),				ODBCXX_STRING_LEN(table),				scope,nullable);  this->_checkStmtError(hstmt_,r,ODBCXX_STRING_CONST("Error fetching special columns"));  ResultSet* rs=this->_getResultSet(true);  return rs;}Connection* Statement::getConnection(){  return connection_;}int Statement::getQueryTimeout(){  return this->_getNumericOption    (ODBC3_C(SQL_ATTR_QUERY_TIMEOUT,SQL_QUERY_TIMEOUT));}void Statement::setQueryTimeout(int seconds){  this->_setNumericOption    (ODBC3_C(SQL_ATTR_QUERY_TIMEOUT,SQL_QUERY_TIMEOUT),seconds);}int Statement::getMaxRows(){  return this->_getNumericOption    (ODBC3_C(SQL_ATTR_MAX_ROWS,SQL_MAX_ROWS));}void Statement::setMaxRows(int maxRows){  this->_setNumericOption    (ODBC3_C(SQL_ATTR_MAX_ROWS,SQL_MAX_ROWS),maxRows);}int Statement::getMaxFieldSize(){  return this->_getNumericOption    (ODBC3_C(SQL_ATTR_MAX_LENGTH,SQL_MAX_LENGTH));}void Statement::setMaxFieldSize(int maxFieldSize){  this->_setNumericOption    (ODBC3_C(SQL_ATTR_MAX_LENGTH,SQL_MAX_LENGTH),maxFieldSize);}void Statement::cancel(){  SQLRETURN r=SQLCancel(hstmt_);  this->_checkStmtError(hstmt_,r,ODBCXX_STRING_CONST("Error canceling statement"));}int Statement::getUpdateCount(){  // For ODBC3, if the last call to SQLExecute or SQLExecDirect  // returned SQL_NO_DATA, a call to SQLRowCount can cause a  // function sequence error. Therefore, if the last result is  // SQL_NO_DATA, we simply return 0  // Since an ODBC2 driver manager might be using  if(lastExecute_!=ODBC3_C(SQL_NO_DATA,SQL_NO_DATA_FOUND)) {    SQLINTEGER res;    SQLRETURN r=SQLRowCount(hstmt_,&res);    this->_checkStmtError(hstmt_,r,ODBCXX_STRING_CONST("Error fetching update count"));    return res;  } else {    return -1;  }}void Statement::setCursorName(const ODBCXX_STRING& name){  SQLRETURN r=SQLSetCursorName(hstmt_,			       (ODBCXX_SQLCHAR*) ODBCXX_STRING_DATA(name),			       ODBCXX_STRING_LEN(name));  this->_checkStmtError(hstmt_,r,ODBCXX_STRING_CONST("Error setting cursor name"));}bool Statement::execute(const ODBCXX_STRING& sql){  this->_beforeExecute();  SQLRETURN r=SQLExecDirect(hstmt_,			    (ODBCXX_SQLCHAR*) ODBCXX_STRING_DATA(sql),			    ODBCXX_STRING_LEN(sql));  lastExecute_=r;  ODBCXX_STRING msg=ODBCXX_STRING_CONST("Error executing \"")+sql+ODBCXX_STRING_CONST("\"");  this->_checkStmtError(hstmt_,r,ODBCXX_STRING_CSTR(msg));  this->_afterExecute();  return this->_checkForResults();}ResultSet* Statement::executeQuery(const ODBCXX_STRING& sql){  this->execute(sql);  return this->_getResultSet();}int Statement::executeUpdate(const ODBCXX_STRING& sql){  this->execute(sql);  return this->getUpdateCount();}ResultSet* Statement::getResultSet(){  if(this->_checkForResults()) {    return this->_getResultSet();  }  return NULL;}bool Statement::getMoreResults(){  if(this->_getDriverInfo()->supportsFunction(SQL_API_SQLMORERESULTS)) {    SQLRETURN r=SQLMoreResults(hstmt_);    this->_checkStmtError(hstmt_,r,ODBCXX_STRING_CONST("Error checking for more results"));    // needed for getUpdateCount() to correctly    // support the traversal of multiple results    lastExecute_=r;    return (r==SQL_SUCCESS ||	    r==SQL_SUCCESS_WITH_INFO);  }  return false;}void Statement::setFetchSize(int fs){  if(fs>0) {    fetchSize_=fs;  } else if (fs==0) {    fetchSize_=SQL_ROWSET_SIZE_DEFAULT;  } else {    throw SQLException(ODBCXX_STRING_CONST("Invalid fetch size"));  }}void Statement::setEscapeProcessing(bool on){  this->_setNumericOption    (ODBC3_C(SQL_ATTR_NOSCAN,SQL_NOSCAN),on?SQL_NOSCAN_OFF:SQL_NOSCAN_ON);}bool Statement::getEscapeProcessing(){  return this->_getNumericOption    (ODBC3_C(SQL_ATTR_NOSCAN,SQL_NOSCAN))==SQL_NOSCAN_OFF;}void Statement::close(){  if(state_==STATE_OPEN) {    SQLRETURN r=SQLFreeStmt(hstmt_,SQL_CLOSE);    this->_checkStmtError(hstmt_,r,ODBCXX_STRING_CONST("Error closing all results for statement"));    state_=STATE_CLOSED;  }}

⌨️ 快捷键说明

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