?? bbdblib.h
字號:
#ifndef _BBADOCONNECT_H
#define _BBADOCONNECT_H
//
// ADO訪問數(shù)據(jù)庫類
// 軟件環(huán)境:需要MSADO15.DLL
// 作者:鄧振波
// 2001.4.20
// Email:bozi@china.com
// 說明:封裝了ADO使用的操作函數(shù)和ADO訪問數(shù)據(jù)庫錯誤處理
// 使在VC上方便的使用ADO訪問數(shù)據(jù)庫
// 包括:ADO連接數(shù)據(jù)庫、打開記錄集、執(zhí)行SQL、以及
// 事務(wù)處理、ADO記錄集內(nèi)容轉(zhuǎn)換成C++的常用數(shù)據(jù)類型(CString、char,long,float等)
//
// 使用:1。定義一個CBBAdoConnection實例:CBBAdoConnection m_adoConn;
// 2。建立連接:m_adoConn.Open(strConnstring);
// 如果需要無條件重新連接的可以,參數(shù)bRepen設(shè)成TREU
// 3。打開記錄集:
//
// _RecordsetPtr* prsThis=NULL;
// prsThis=new _RecordsetPtr;
// CString strSQL;
// strSQL="select * from Table_Name";//
// //如果記錄集打開失敗
// if(!(m_adoConn.OpenRecordset(strSQL,prsThis)))
// return FALSE;
// 4。建立記錄集值對象
// 注意需要用參數(shù)構(gòu)造
// CBBRstValues rsv(m_adoConn,prsThis);
//
// 5。獲得的字段的值
// rsv.GetValueLong(&m_nDeptID,1L);//獲得第一個字段的值
// rsv.GetValueStr(m_strName,"ID");//獲得第一個字段名為ID的值
// 其它的同理.如果需要獲得SQL Server中nText類型的字段值請用
// GetValText(CString &strText, CString &strFieldName)函數(shù)
// 6。記錄集的記錄移動 (*prsThis)->MoveNext()等類似函數(shù)
// 7。記錄集不用時候需要釋放其資源
// 1)關(guān)閉記錄集
// 2)刪除記錄集指針
// e.g. (*prsThis)->Close();
// delete prsThis;
// prsThis=NULL;
// 否則會造成內(nèi)存泄漏
//
// 注:
// 1。程序必須要初始化COM環(huán)境,請在應(yīng)用類中加入AfxInitOle函數(shù)初始化環(huán)境,否則ADO的調(diào)用將失敗
// 2。如果需要調(diào)用存儲過程SQL語句改為“Exec ” + 存儲過程名即可,與執(zhí)行SQL同樣
//
//
//
//
//
// msado15.dll必須放在本文件所在目錄,或者自己指定下面的msado15.dll全路徑
#if !defined(__AFXADO_H)
#import "msado15.dll" no_namespace rename ("EOF", "adoEOF") \
rename ("LockTypeEnum", "adoLockTypeEnum") \
rename ("DataTypeEnum", "adoDataTypeEnum") \
rename ("FieldAttributeEnum", "adoFieldAttributeEnum") \
rename ("EditModeEnum", "adoEditModeEnum") \
rename ("RecordStatusEnum", "adoRecordStatusEnum") \
rename ("ParameterDirectionEnum", "adoParameterDirectionEnum")
#endif //#if !defined(__AFXADO_H)
#ifndef _AFXEXT
#pragma warning (disable : 4201)
#pragma comment(lib,"../lib/BBDBlib.lib")
#pragma message("\t程序自動連接.../lib/BBDBlib.lib的庫,\n\t請檢查是否存在文件。")
#pragma warning (default : 4201)
#endif
class AFX_EXT_CLASS CBBAdoConnection
{
public:
CBBAdoConnection();
virtual ~CBBAdoConnection();
public:
int SetConnTimeOut(long lTimeOut);// 設(shè)置連接超時
int SetCommTimeOut(long lTimeOut);// 設(shè)置命令執(zhí)行超時
BOOL IsConnectClose();// 判斷連接是否已經(jīng)打開
int ExecuteSQL(LPCSTR szSQL);// 簡單執(zhí)行SQL語句,不返回記錄集
// 打開數(shù)據(jù)庫記錄集
// 參數(shù):
// strSQL 記錄集的SQL語句
// rs 返回的記錄集_RecordsetPtr對象
// sConnString 數(shù)據(jù)庫的連接字符串
// 如果使用數(shù)據(jù)庫連接已經(jīng)打開,參數(shù)沒用
// 如果數(shù)據(jù)庫的連接沒有打開,當給予一個連接字符串,將先打開數(shù)據(jù)庫連接
BOOL OpenRecordset(CString strSQL, _RecordsetPtr *rs,CString sConnString="");//打開數(shù)據(jù)庫記錄集
BOOL OpenRecordset(const char *sSQL,_RecordsetPtr* rs,char* sConnString=NULL);
// 打開數(shù)據(jù)庫連接
// 參數(shù):
// strConnString 連接字符串
// sConnString 連接字符串
// bReOpen 是否重新打開,如果為FALSE,,
// 將先判斷數(shù)據(jù)庫是否打開如果沒有打開則打開,
// 如果已經(jīng)打開,將不執(zhí)行任何操作
// 如果為TRUE,則無條件重新打開。
BOOL OpenConnection(CString strConnString ,BOOL bReOpen=FALSE);
BOOL OpenConnection(char* sConnString,BOOL bReOpen=FALSE);
void CloseConnect();// 關(guān)閉數(shù)據(jù)庫連接
BOOL ExecuteTrans(CStringArray arrStrSQL);// 開始事務(wù)處理,不返回任何記錄集,參數(shù)為事務(wù)SQL數(shù)組
_ConnectionPtr* GetConnection();// 得到_ConnectionPtr指針
CString GetConnString();// 得到連接字符串
private:
enum ERRORFrom {
ErrFormOpenConnsction,
ErrFromOpenRecordset,
ErrFormCloseConnection,
ErrFormTanslation
};
_ConnectionPtr* m_pConn;
char m_szConnString[512];
///
protected:
void ReportError(int nERRORfrom);
};
class AFX_EXT_CLASS CBBRstValues
{
public:
// 三種構(gòu)造類的方法
// 如果無參數(shù)構(gòu)造,請構(gòu)造后調(diào)用InitConnectAndRst方法
// 其他的兩種構(gòu)造則不需調(diào)用InitConnectAndRst方法
CBBRstValues();
CBBRstValues(_ConnectionPtr* pConn,_RecordsetPtr* pRs);
CBBRstValues(CBBAdoConnection* pBBadoConn,_RecordsetPtr* pRs);
virtual ~CBBRstValues();
public:
// 初始化連接隊象和記錄集對象
void InitConnectAndRst(_ConnectionPtr* pConn,_RecordsetPtr* pRs);
void InitConnectAndRst(CBBAdoConnection* pBBAdoConn, _RecordsetPtr * pRs);
// GetValText函數(shù)
// 得到數(shù)據(jù)庫nText字段的值
// 參數(shù):
// strText 用來接收返回值(字段值)
// strFieldName 字段名,該字段數(shù)據(jù)類型必須是nText類型
BOOL GetValText(CString& strText,CString& strFieldName);//得到數(shù)據(jù)庫nText字段的值
// GetValueStr函數(shù)
// 得到數(shù)字型,日期型和字符型字段值函數(shù)
// 參數(shù):
// cVal 用來接收返回值(字段值)的字符串指針,要求要開辟足夠的內(nèi)存單元
// 或者足夠容納字段內(nèi)容的字符數(shù)組。
// vIndex 數(shù)據(jù)庫字段的名字或者索引,變體型,一般不直接用這個參數(shù),
// 應(yīng)該用同形式的多態(tài)函數(shù)的參數(shù)調(diào)用
// 數(shù)據(jù)庫字段的數(shù)據(jù)類型可以是數(shù)字型,日期型和字符型
// nFieldLen 需要返回的數(shù)據(jù)的字符串的長度,如果為-1,則返回整個字段值
// lpszFieldName 字段名,數(shù)據(jù)庫字段的數(shù)據(jù)類型可以是數(shù)字型,日期型和字符型
// nFieldIndex 在SQL語句中字段的索引序號數(shù)據(jù)庫字段的數(shù)據(jù)類型可以是數(shù)字型,日期型和字符型
// GetValueLong函數(shù)
// 得到數(shù)字型,日期型和字符型字段值函數(shù)
// 參數(shù):
// lVal 用來接收返回值(字段值)
// vIndex 數(shù)據(jù)庫字段的名字或者索引,變體型,一般不直接用這個參數(shù),
// 應(yīng)該用同形式的多態(tài)函數(shù)的參數(shù)調(diào)用
// 數(shù)據(jù)庫字段的數(shù)據(jù)類型要求是數(shù)字型(int,long)
// lpszFieldName 字段名,數(shù)據(jù)庫字段的數(shù)據(jù)類型可以是數(shù)字型,日期型和字符型
// nFieldIndex 在SQL語句中字段的索引序號數(shù)據(jù)庫字段的數(shù)據(jù)類型可以是數(shù)字型,日期型和字符型
// GetValueFlaot函數(shù)
// 得到數(shù)字型,日期型和字符型字段值函數(shù)
// 參數(shù):
// fVal 用來接收返回值(字段值)
// vIndex 數(shù)據(jù)庫字段的名字或者索引,變體型,一般不直接用這個參數(shù),
// 應(yīng)該用同形式的多態(tài)函數(shù)的參數(shù)調(diào)用
// 數(shù)據(jù)庫字段的數(shù)據(jù)類型要求是字型(int,long,float,貨幣型等)
// lpszFieldName 字段名,數(shù)據(jù)庫字段的數(shù)據(jù)類型可以是數(shù)字型,日期型和字符型
// nFieldIndex 在SQL語句中字段的索引序號數(shù)據(jù)庫字段的數(shù)據(jù)類型可以是數(shù)字型,日期型和字符型
BOOL GetValueStr(char* cVal,_variant_t &vIndex,int nFieldLen=-1);
BOOL GetValueLong(long* lVal,_variant_t &vIndex);
BOOL GetValueFloat(float* fVal,_variant_t &vIndex);
BOOL GetValueStr(char* cVal,long lIndex,int nFieldLen=-1);
BOOL GetValueLong(long* lVal,long lIndex);
BOOL GetValueFloat(float* fVal,long lIndex);
BOOL GetValueStr(char* cVal,CString strIndex,int nFieldLen=-1);
GetValueLong(long *lVal, LPCSTR lpszIndex);
BOOL GetValueFloat(float* fVal,CString strIndex);
BOOL GetValueStr(CString& str,LPCSTR lpszFieldName,int nFieldLen=-1);
BOOL GetValueStr(CString& str,UINT nFieldIndex,int nFieldLen=-1);
BOOL GetValueStr(CString& str,_variant_t &vIndex,int nFieldLen=-1);
// 判斷值是否有效,是否為NULL
BOOL VerifyVTData(_variant_t& value);
BOOL VerifyVTData(char* pData);
protected:
_RecordsetPtr* m_prsThis;
_ConnectionPtr* m_pConn;
void ReportError();
};
#endif // _BBADOCONNECT_H
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -