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;
}