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

📄 db2lib.cpp

📁 访问db2数据库的VC封装
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    SQLRETURN   rc ;
    SQLSMALLINT nresultcols, i ;
    SQLINTEGER  displaysize ;
    SQLINTEGER  outlen[256] ;
	
	/* Get result set column number*/
    rc = SQLNumResultCols( m_hstmt, &nresultcols ) ;
	m_colCount = nresultcols;
	if ( rc != SQL_SUCCESS) 
	{
		handle_error( SQL_HANDLE_STMT, m_hstmt, rc ) ;
		m_errorCode = m_dbErrorInfo.SqlCode;
		strcpy(m_errorMsg, "金证标准存储过程执行失败");
		return false;
	}
	/* if have result set, bind columns to program vars*/
	if ( nresultcols > 0)
	{
		for ( i = 0; i < nresultcols; i++ ) 
		{
			SQLDescribeCol( m_hstmt,
				( SQLSMALLINT ) ( i + 1 ),
				m_colInfo[i].Name,
				sizeof(m_colInfo[i].Name),
				&(m_colInfo[i].NameLen),
				&(m_colInfo[i].Type),
				&(m_colInfo[i].MaxLength),
				&(m_colInfo[i].Precision),
				NULL
				) ;
			/* get display length for column */
			SQLColAttribute( m_hstmt,
				( SQLSMALLINT ) ( i + 1 ),
				SQL_DESC_DISPLAY_SIZE,
				NULL,
				0,
				NULL,
				&displaysize
				) ;
			
				/*
				Set column length to max of display length,
				and column name length. Plus one byte for
				null terminator.
			*/
			m_colInfo[i].MaxLength = max( (size_t)displaysize,strlen( ( char * ) m_colInfo[i].Name )) + 1 ;
			
			/* bind columns to program vars, converting all types to CHAR */
			SQLBindCol( m_hstmt,
				( SQLSMALLINT ) ( i + 1 ),
				SQL_C_CHAR,
				m_data[i],
				m_colInfo[i].MaxLength,
				&outlen[i]
				) ;
		}
	}
	return true;
	
	
}

bool CDb2lib::Run20(const char *CommandStr, char *Param[], int ParamNum)
{
	SQLRETURN   rc ;
	SQLSMALLINT nresultcols;
	SQLINTEGER  ErrMsgOutLen;

	
	if (Run(CommandStr, Param, ParamNum) == true)
	{
		/* Get the first result set for m_errorcode an m_errormsg */
		rc = SQLNumResultCols( m_hstmt, &nresultcols ) ;
		if ( rc != SQL_SUCCESS) 
			handle_error( SQL_HANDLE_STMT, m_hstmt, rc ) ;
		if (nresultcols != 2)
		{
			m_errorCode = -1;
			strcpy(m_errorMsg, "非金证标准存储过程");
			return false;
		}
		SQLBindCol(m_hstmt,1,SQL_C_LONG,&m_errorCode,0,&ErrMsgOutLen) ;
		SQLBindCol(m_hstmt,2,SQL_C_CHAR,(SQLCHAR*)m_errorMsg,256,&ErrMsgOutLen) ;
		rc = SQLFetch( m_hstmt ) ;
        if ( (rc != SQL_SUCCESS) && (rc != SQL_SUCCESS_WITH_INFO) && (rc != SQL_NO_DATA_FOUND) ) 
		{
			handle_error( SQL_HANDLE_STMT, m_hstmt, m_rc ) ;
			m_errorCode = m_dbErrorInfo.SqlCode;
			strcpy(m_errorMsg, "金证标准存储过程执行失败");
			return false;
		}
		/* if have next result set, bind columns to program vars */
		rc = SQLMoreResults(m_hstmt);
		if ( rc == SQL_SUCCESS) 
		{
			if ( !Bind() )			
				return false;
			memset(m_data, 0, sizeof(m_data));
			
		}
		else if ( rc != SQL_NO_DATA_FOUND)
		{
			handle_error( SQL_HANDLE_STMT, m_hstmt, m_rc ) ;
			m_errorCode = m_dbErrorInfo.SqlCode;
			strcpy(m_errorMsg, "金证标准存储过程执行失败");
			return false;
			
		}
	}
	else 
	{
		return false;
	}
	
	return true;	
	
	
}

bool CDb2lib::Run20Error(const char *CommandStr, char *Param[], int ParamNum)
{
#ifdef __BORLANDC__
	
	Run(CommandStr, Param, ParamNum);
	
    if(GetErrorCode() == 0)
    {
        return true;
    }
    else
    {
        MessageBox(Screen->ActiveForm->Handle, GetErrorMsg(), "系统提示信息", MB_OK | MB_ICONSTOP);
        return false;
    }
#else
    return false;
#endif
}

bool CDb2lib::Run20Message(const char *CommandStr, char *Param[], int ParamNum)
{
#ifdef __BORLANDC__
	
	Run(CommandStr, Param, ParamNum);
	
    if(GetErrorCode() == 0)
    {
        MessageBox(Screen->ActiveForm->Handle, GetErrorMsg(), "系统提示信息", MB_OK | MB_ICONINFORMATION);
        return true;
    }
    else
    {
        MessageBox(Screen->ActiveForm->Handle, GetErrorMsg(), "系统提示信息", MB_OK | MB_ICONSTOP);
        return false;
    }
#else
    return false;
#endif
}

bool CDb2lib::MoveNext()
{
	SQLRETURN   MutiResults_rc ;
	SQLRETURN   MutiRows_rc ;
	
	/* Fetch the result set data, if fetch data fail, return false*/
	MutiRows_rc = SQLFetch( m_hstmt ) ;
	if ( MutiRows_rc == SQL_NO_DATA_FOUND) 
	{
		/* if the current result set have not data, get next result set*/
		MutiResults_rc = SQLMoreResults(m_hstmt);
		/* if have next result set, bind columns to program vars and fetch result set data*/
		if (MutiResults_rc == SQL_SUCCESS)
		{
            memset(m_data, 0, sizeof(m_data));
			Bind();
			MutiRows_rc = SQLFetch( m_hstmt ) ;
			if ( MutiRows_rc == SQL_NO_DATA_FOUND) 
			{
				EndTran();
				return false;
			}
			else if (MutiRows_rc !=SQL_SUCCESS)
			{
				handle_error( SQL_HANDLE_STMT, m_hstmt, m_rc ) ;
				m_errorCode = m_dbErrorInfo.SqlCode;
				strcpy(m_errorMsg, "金证标准存储过程取结果集失败");
				EndTran();
				return false;
			}
			else
				return true;
		}
		else if (MutiResults_rc != SQL_NO_DATA_FOUND)
		{
			handle_error( SQL_HANDLE_STMT, m_hstmt, m_rc ) ;
			m_errorCode = m_dbErrorInfo.SqlCode;
			strcpy(m_errorMsg, "金证标准存储过程取结果集失败");
			EndTran();
			return false;
		}
		EndTran();
		return false;
	}
	else if (MutiRows_rc !=SQL_SUCCESS)
	{
		handle_error( SQL_HANDLE_STMT, m_hstmt, m_rc ) ;
		m_errorCode = m_dbErrorInfo.SqlCode;
		strcpy(m_errorMsg, "金证标准存储过程取结果集失败");
		EndTran();
		return false;
	}
	m_rowCount++;
	return true;
}

bool CDb2lib::Cancel()
{
	/* Cancel prematurely terminate the data-at-execution sequence */
	if (SQLCancel(m_hstmt) != SQL_SUCCESS) 
	{
		handle_error( SQL_HANDLE_STMT, m_hstmt, m_rc ) ;
		m_errorCode = m_dbErrorInfo.SqlCode;
		strcpy((char *)m_errorMsg, (char *)(m_dbErrorInfo.ErrorMsg+1));
		return false;
	}
	return true;
}

const SDBCOL * CDb2lib::GetColInfo(int index)
{
	/* Get column informations by columns index*/
	if(m_errorCode != 0 || m_colCount <= 0 || index >= m_colCount)
		return (const SDBCOL *)NULL;
	return &m_colInfo[index];
}

const SDBCOL * CDb2lib::GetColInfo(const char * colName)
{
	int index;
	
	/* Get column informations by columns name*/
	for(index = 0; index < m_colCount; index ++)
	{
		if(stricmp((char *)(m_colInfo[index].Name), (char *)colName) == 0)
			return GetColInfo(index);
	}
	
	return (const SDBCOL *)NULL;
}

char * CDb2lib::GetColData(int index)
{
	/* Get column data by column index*/
	
	if(m_errorCode != 0 || m_colCount <= 0 || index >= m_colCount)
		return (char *)"";
	return (char *)m_data[index];
}

char * CDb2lib::GetColData(const char * colName)
{
	int index;
	
	/* Get column data by column name*/
	for(index = 0; index < m_colCount; index ++)
	{
		if(stricmp((char *)(m_colInfo[index].Name), (char *)colName) == 0)
			return GetColData(index);
	}
	
	return (char *)"";
}



bool CDb2lib::EndTran()
{
	SQLRETURN   rc ;
	/* Ends processing on the statement referenced by the statement handle*/
	rc = SQLEndTran( SQL_HANDLE_DBC, m_hdbc, SQL_COMMIT ) ;
	if (rc !=SQL_SUCCESS)
	{
		handle_error( SQL_HANDLE_DBC, m_hdbc, rc ) ;
		m_errorCode = m_dbErrorInfo.SqlCode;
		strcpy((char *)m_errorMsg, (char *)(m_dbErrorInfo.ErrorMsg+1));
		return false;
	}
				
	rc = SQLFreeStmt( m_hstmt, SQL_UNBIND ) ;
	if (rc !=SQL_SUCCESS)
	{
		handle_error( SQL_HANDLE_STMT, m_hstmt, rc ) ;
		m_errorCode = m_dbErrorInfo.SqlCode;
		strcpy((char *)m_errorMsg, (char *)(m_dbErrorInfo.ErrorMsg+1));
		return false;
	}
				
	rc = SQLFreeStmt( m_hstmt, SQL_RESET_PARAMS ) ;
	if (rc !=SQL_SUCCESS)
	{
		handle_error( SQL_HANDLE_STMT, m_hstmt, rc ) ;
		m_errorCode = m_dbErrorInfo.SqlCode;
		strcpy((char *)m_errorMsg, (char *)(m_dbErrorInfo.ErrorMsg+1));
		return false;
	}
				
	rc = SQLFreeStmt( m_hstmt, SQL_CLOSE ) ;
	if (rc !=SQL_SUCCESS)
	{
		handle_error( SQL_HANDLE_STMT, m_hstmt, rc ) ;
		m_errorCode = m_dbErrorInfo.SqlCode;
		strcpy((char *)m_errorMsg, (char *)(m_dbErrorInfo.ErrorMsg+1));
		return false;
	}
				
	return true;
				
}

int CDb2lib::GetErrorCode()
{
	return m_errorCode;
}

const char * CDb2lib::GetErrorMsg()
{
    return m_errorMsg;
}

const CDbErrorInfo * CDb2lib::GetDbErrorInfo()
{
    return &m_dbErrorInfo;
}


USHORT CDb2lib::GetServerList(CServerList * serverList)
{
	
	SQLSMALLINT buffl, desl ;
	SQLRETURN rc ;
	int Num = 0;
	
    while(1)
	{  rc = SQLDataSources( m_henv,
		SQL_FETCH_NEXT,
		serverList[Num].ServerName,
		SQL_MAX_DSN_LENGTH + 1,
		&buffl,
		serverList[Num].Description,
		255,
		&desl
		);
		if( (rc != SQL_NO_DATA_FOUND) && (rc != SQL_NO_DATA_FOUND) && (rc != SQL_NO_DATA_FOUND))
		{
			
			handle_error( SQL_HANDLE_ENV, m_henv, rc) ;
			return -1;
		}
		else if(rc == SQL_NO_DATA_FOUND) 
			Num++ ;
		else 
			break;
		
	}
	return Num;
}

⌨️ 快捷键说明

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