www.pudn.com > 使VC连接数据库变的更简单.rar > C_SQL.cpp


#include"stdafx.h" 
#include"C_SQL.h" 
int C_ResultSet::AlignBuffer(int length) 
{ 
	int AlignSize=4; 
	if((length%AlignSize)!=0) 
		return length+AlignSize-(length%AlignSize); 
	else 
		return length+4; 
} 
void C_ResultSet::SetStmt(SQLHSTMT hOdbcStmt) 
{ 
	this->hOdbcStmt=hOdbcStmt; 
} 
SQLHSTMT C_ResultSet::GetStmt() 
{ 
	return hOdbcStmt; 
} 
bool C_ResultSet::Open() 
{ 
	SQLSMALLINT NumCols,i; 
	SQLRETURN sr; 
	sr=SQLNumResultCols(hOdbcStmt,&NumCols); 
	if(sr!=SQL_SUCCESS&&sr!=SQL_SUCCESS_WITH_INFO) 
		return false; 
    CTypeArray=(SQLSMALLINT*)malloc(NumCols *sizeof(SQLSMALLINT)); 
	ColLenArray=(SQLINTEGER *)malloc(NumCols *sizeof(SQLINTEGER)); 
	RecLenArray=(SQLINTEGER *)malloc(NumCols *sizeof(SQLINTEGER)); 
	OffsetArray=(SQLINTEGER *)malloc(NumCols *sizeof(SQLINTEGER)); 
	OffsetArray[0]=0; 
	for(i=0;i=0) 
	{ 
		char *s=(char *)((BYTE *)DataPtr+OffsetArray[column-1]); 
		CString Record((LPCTSTR)s,RecLenArray[column-1]); 
		return Record; 
	} 
	else 
	{ 
		CString Record(""); 
		return Record; 
	} 
} 
int C_ResultSet::GetInt(int column) 
{ 
	int *i=(int *)((BYTE *)DataPtr+OffsetArray[column-1]); 
	return *i; 
} 
long C_ResultSet::GetLong(int column) 
{ 
   	long *i=(long *)((BYTE *)DataPtr+OffsetArray[column-1]); 
	return *i; 
} 
bool C_ResultSet::GetBool(int column) 
{ 
   	bool *b=(bool *)((BYTE *)DataPtr+OffsetArray[column-1]); 
	return *b; 
} 
float C_ResultSet::GetFloat(int column) 
{ 
		float *f=(float *)((BYTE *)DataPtr+OffsetArray[column-1]); 
	return *f; 
} 
   
double C_ResultSet::GetDouble(int column) 
{ 
		double *d=(double *)((BYTE *)DataPtr+OffsetArray[column-1]); 
	return *d; 
} 
TimeStamp C_ResultSet::GetDateTime(int column) 
{ 
		TimeStamp *ts=(TimeStamp *)((BYTE *)DataPtr+OffsetArray[column-1]); 
	    return *ts; 
} 
 
bool C_Connection::Open(CString DSN,CString UserID,CString UserPassword) 
{ 
	SQLRETURN sr=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&hOdbcEnv); 
	if(sr!=SQL_SUCCESS&&sr!=SQL_SUCCESS_WITH_INFO) 
	  return false; 
	sr=SQLSetEnvAttr(hOdbcEnv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER); 
	sr=SQLAllocHandle(SQL_HANDLE_DBC,hOdbcEnv,&hOdbcConn); 
	if(sr!=SQL_SUCCESS&&sr!=SQL_SUCCESS_WITH_INFO) 
	 return false; 
	sr=SQLConnect(hOdbcConn,(UCHAR *)LPCTSTR(DSN),SQL_NTS,(UCHAR *)LPCTSTR(UserID),SQL_NTS,(UCHAR *)LPCTSTR(UserPassword),SQL_NTS); 
     if(sr!=SQL_SUCCESS&&sr!=SQL_SUCCESS_WITH_INFO) 
	 return false; 
	return true; 
} 
 
bool C_Connection::Update(CString sql) 
{ 
	SQLHSTMT hOdbcStmt; 
	SQLRETURN sr=SQLAllocHandle(SQL_HANDLE_STMT,hOdbcConn,&hOdbcStmt); 
   if(sr!=SQL_SUCCESS&&sr!=SQL_SUCCESS_WITH_INFO) 
	 return false; 
   sr=SQLExecDirect(hOdbcStmt,(UCHAR *)LPCTSTR(sql),SQL_NTS); 
   if(sr!=SQL_SUCCESS&&sr!=SQL_SUCCESS_WITH_INFO) 
	 return false; 
   if(hOdbcStmt!=SQL_NULL_HANDLE) 
	   SQLFreeHandle(SQL_HANDLE_STMT,hOdbcStmt); 
   return true; 
} 
bool C_Connection::Query(C_ResultSet *cr,CString sql) 
{ 
	SQLHSTMT hOdbcStmt; 
	SQLRETURN sr=SQLAllocHandle(SQL_HANDLE_STMT,hOdbcConn,&hOdbcStmt); 
     if(sr!=SQL_SUCCESS&&sr!=SQL_SUCCESS_WITH_INFO) 
	 return false; 
   sr=SQLSetStmtAttr(hOdbcStmt,SQL_ATTR_CURSOR_TYPE,(void *)SQL_CURSOR_DYNAMIC,SQL_IS_UINTEGER); 
    if(sr!=SQL_SUCCESS&&sr!=SQL_SUCCESS_WITH_INFO) 
	 return false; 
 
   sr=SQLExecDirect(hOdbcStmt,(UCHAR *)LPCTSTR(sql),SQL_NTS); 
   if(sr!=SQL_SUCCESS&&sr!=SQL_SUCCESS_WITH_INFO) 
	 return false; 
   cr->SetStmt(hOdbcStmt); 
   return true; 
} 
bool C_Connection::Close() 
{ 
	SQLRETURN sr; 
	if(hOdbcConn!=SQL_NULL_HANDLE) 
	{ 
		sr=SQLDisconnect(hOdbcConn); 
		if(sr!=SQL_SUCCESS&&sr!=SQL_SUCCESS_WITH_INFO) 
	 return false; 
	} 
	if(hOdbcConn!=SQL_NULL_HANDLE) 
	{ 
		sr=SQLFreeHandle(SQL_HANDLE_DBC,hOdbcConn); 
		if(sr!=SQL_SUCCESS&&sr!=SQL_SUCCESS_WITH_INFO) 
	 return false; 
	} 
	if(hOdbcEnv!=SQL_NULL_HANDLE) 
	{ 
		sr=SQLFreeHandle(SQL_HANDLE_ENV,hOdbcEnv); 
		if(sr!=SQL_SUCCESS&&sr!=SQL_SUCCESS_WITH_INFO) 
	 return false; 
	} 
	return true; 
}