?? ado.cpp
字號(hào):
// ADO.cpp: implementation of the CADO class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ADO.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CADO::CADO()
{
m_pRecordset = NULL;
m_pConnection = NULL;
m_szConnectionString = _T("");
m_szSQL = _T("");
m_szUdlFileName = _T("");
m_nRecordCount = -1;
m_bCmd = TRUE;
}
CADO::~CADO()
{
CloseDatabaseConnection();
}
BOOL CADO::CloseDatabaseConnection()
{
if(NULL != m_pRecordset)
{
if(m_pRecordset->State)
{
m_pRecordset->Close();
m_pRecordset = NULL;
}
}
if(NULL != m_pConnection)
{
if(m_pConnection->State)
{
m_pConnection->Close();
m_pConnection = NULL;
}
}
return TRUE;
}
BOOL CADO::InitDatabaseConnection()
{
BOOL bRet;
HRESULT hr = S_OK;
bRet = FALSE;
if(!m_szUdlFileName.IsEmpty())
{
m_szConnectionString.Format(_T("File Name=%s"), m_szUdlFileName);
}
if(m_szConnectionString.IsEmpty())
{
return FALSE;
}
//初始化COM 庫
// ::CoInitialize(NULL);
//AfxOleInit();
///////////////////連接數(shù)據(jù)庫///////////////////
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");
//連接SQL SERVER
//m_pConnection->Open("Driver=SQL Server;Database=test;Server=127.0.0.1;UID=sa;PWD=;","","",adModeUnknown);
//連接ACCESS2000
if(SUCCEEDED(hr))
{
// hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Test.mdb;Password=;Persist Security Info=False","","",adModeUnknown);
hr = m_pConnection->Open(_bstr_t(m_szConnectionString), "", "", adModeUnknown);
bRet = TRUE;
}
//上面一句中連接字串中的Provider是針對ACCESS2000環(huán)境的,對于ACCESS97,需要改為:Provider=Microsoft.Jet.OLEDB.3.51;
}
catch(_com_error e)///捕捉異常
{
CString str;
str.Format("數(shù)據(jù)庫連接失敗! \n\n%s", e.ErrorMessage());
AfxMessageBox(str);
bRet = FALSE;
}
catch(...)
{
AfxMessageBox("Error!");
bRet = FALSE;
}
try
{
hr = m_pRecordset.CreateInstance("ADODB.Recordset");
if(SUCCEEDED(hr))
{
//hr = m_pRecordset->Open("SELECT * FROM UserName",_variant_t((IDispatch *)m_pConnection,true),adOpenDynamic,adLockPessimistic,adCmdText);
/*
if(SUCCEEDED(hr))
{
NULL;
}
*/
}
else
{
bRet = FALSE;
AfxMessageBox("創(chuàng)建ADO記錄集實(shí)例出錯(cuò)!");
}
}
catch(...)
{
AfxMessageBox("Error!");
bRet = FALSE;
}
return bRet;
}
BOOL CADO::GetFieldsName(CStringArray &saFieldsName)
{
if(m_bCmd)
{
return FALSE;
}
BOOL bRet=FALSE;
long nFieldsCount=0;
CString szField("");
if(NULL != m_pRecordset)
{
nFieldsCount = m_pRecordset->GetFields()->Count;
saFieldsName.RemoveAll();
for(long i=0; i<nFieldsCount; i++)
{
szField.Format(_T("%s"), (char*)(m_pRecordset->GetFields()->Item[i]->Name));
saFieldsName.Add(szField);
bRet = TRUE;
}
}
return bRet;
}
BOOL CADO::GetFieldValue(CString szField, CString &szValue)
{
if(m_bCmd)
{
return FALSE;
}
BOOL bRet=FALSE;
CString szTemp("");
_variant_t vTemp;
if(NULL != m_pRecordset)
{
// vTemp = m_pRecordset->GetCollect(_variant_t(szField));
szTemp.Format(_T("%s"), szField);
vTemp = m_pRecordset->Fields->Item[_variant_t(szTemp)]->Value;
szTemp = _T("");
if((vTemp.vt != VT_NULL) && (vTemp.vt != VT_EMPTY))
{
szTemp = (LPCTSTR)(_bstr_t)vTemp;
}
bRet = TRUE;
}
szValue = szTemp;
return bRet;
}
BOOL CADO::SetFieldValue(CString szField, CString szValue)
{
if(m_bCmd)
{
return FALSE;
}
CString szTemp("");
BOOL bRet= FALSE;
szTemp.Format(_T("%s"), szField);
if(NULL != m_pRecordset)
{
// m_pRecordset->PutCollect(_variant_t(szField), _variant_t(szValue));
m_pRecordset->Fields->Item[_variant_t(szTemp)]->Value = _variant_t(szValue);
bRet = TRUE;
}
return bRet;
}
BOOL CADO::GetBitmapValue(CString szField, HBITMAP &hBitmap)
{
if(m_bCmd)
{
return FALSE;
}
CString szTemp("");
BOOL bRet= FALSE;
szTemp.Format(_T("%s"), szField);
if(NULL != m_pRecordset)
{
int nDataSize = m_pRecordset->GetFields()->GetItem(_variant_t(szTemp))->ActualSize;
if(nDataSize > 0)
{
_variant_t varBLOB;
varBLOB = m_pRecordset->GetFields()->GetItem(_variant_t(szTemp))->GetChunk(nDataSize);
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
char *pBmpBuffer = NULL;
char *pBuf = NULL;
pBmpBuffer = new char[nDataSize+1];
if(pBmpBuffer == NULL)
{
return FALSE;
}
SafeArrayAccessData(varBLOB.parray, (void **)&pBuf);
//復(fù)制數(shù)據(jù)到緩沖區(qū)pBmpBuffer
memcpy(pBmpBuffer, pBuf, nDataSize);
SafeArrayUnaccessData(varBLOB.parray);
//生成BITMAP對象
hBitmap = BufferToHBITMAP(pBmpBuffer);
delete []pBmpBuffer;
if(hBitmap == NULL)
{
bRet = FALSE;
}
else
{
bRet = TRUE;
}
}
}
}
return bRet;
}
char* CADO::GetImageValue(CString szField, int &nSize, int &nImageType)
{
if(m_bCmd)
{
return NULL;
}
CString szTemp("");
char *pImageData = NULL;
char szImageType[12] = {0};
szTemp.Format(_T("%s"), szField);
if(NULL != m_pRecordset)
{
nSize = m_pRecordset->GetFields()->GetItem(_variant_t(szTemp))->ActualSize;
if(nSize > 0)
{
_variant_t varBLOB;
varBLOB = m_pRecordset->GetFields()->GetItem(_variant_t(szTemp))->GetChunk(nSize);
if(varBLOB.vt == (VT_ARRAY | VT_UI1))
{
char *pBuf = NULL;
pImageData = new char[nSize + 1];
if(pImageData == NULL)
{
return NULL;
}
SafeArrayAccessData(varBLOB.parray, (void **)&pBuf);
//復(fù)制數(shù)據(jù)到緩沖區(qū)pBmpBuffer
memcpy(pImageData, pBuf, nSize);
SafeArrayUnaccessData(varBLOB.parray);
}
}
}
memcpy(szImageType, pImageData, 11);
if((szImageType[0] == 'B') && (szImageType[1] == 'M'))
{//Bmp
nImageType = 1;
}
else if((szImageType[6] == 'J') && (szImageType[7] == 'F')
&& (szImageType[8] == 'I') && (szImageType[9] == 'F'))
{//Jpg
nImageType = 2;
}
else if((szImageType[0] == 'G') && (szImageType[1] == 'I')
&& (szImageType[2] == 'F'))
{//Gif
nImageType = 3;
}
else
{
nImageType = 0;
}
return pImageData;
}
BOOL CADO::SetImageValue(CString szField, char *pImageBuff, const int nSize)
{
if(m_bCmd || (pImageBuff == NULL))
{
return FALSE;
}
CString szTemp("");
BOOL bRet = FALSE;
szTemp.Format(_T("%s"), szField);
if(NULL != m_pRecordset)
{
char *pBuf = pImageBuff;
VARIANT varBLOB;
SAFEARRAY *pSa = NULL;
SAFEARRAYBOUND rgsabound[1];
if(pBuf != NULL)
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nSize;
pSa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for(long i=0; i<nSize; i++)
{
SafeArrayPutElement(pSa, &i, pBuf++);
}
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = pSa;
m_pRecordset->GetFields()->GetItem(_variant_t(szTemp))->AppendChunk(varBLOB);
}
bRet = TRUE;
}
return bRet;
}
BOOL CADO::ExeSQL(CString szSQL, BOOL bCmd)
{
BOOL bRet=FALSE;
m_szSQL = szSQL;
m_nRecordCount = -1;
m_bCmd = bCmd;
if(m_szSQL.IsEmpty())
{
return FALSE;
}
if(m_pRecordset != NULL)
{
if(m_pRecordset->State)
{
m_pRecordset->Close();
}
m_pRecordset->Open(_variant_t(m_szSQL), _variant_t((IDispatch*)m_pConnection, true), adOpenStatic, adLockOptimistic, adCmdText);
if(!bCmd)
{
GetRecordCount();
}
bRet = TRUE;
}
return bRet;
}
BOOL CADO::AddNew()
{
BOOL bRet = FALSE;
HRESULT ret=S_FALSE;
if(NULL != m_pRecordset)
{
ret = m_pRecordset->AddNew();
}
if(ret == S_OK)
{
bRet = TRUE;
}
return bRet;
}
BOOL CADO::Delete()
{
BOOL bRet=FALSE;
if(NULL != m_pRecordset)
{
m_pRecordset->Delete(adAffectCurrent);
bRet = TRUE;
}
return bRet;
}
BOOL CADO::Update()
{
BOOL bRet=FALSE;
if(NULL != m_pRecordset)
{
m_pRecordset->Update();
bRet = TRUE;
}
return bRet;
}
int CADO::GetRecordCount()
{
if(m_bCmd)
{
return -1;
}
if(m_nRecordCount != -1)
{
return m_nRecordCount;
}
m_nRecordCount = 0;
if(NULL != m_pRecordset)
{
if(!AdoEof())
{
MoveFirst();
}
while(!AdoEof())
{
m_nRecordCount++;
MoveNext();
}
}
return m_nRecordCount;
}
int CADO::GetFieldsCount()
{
if(m_bCmd)
{
return -1;
}
long nCount=0;
if(NULL != m_pRecordset)
{
nCount = m_pRecordset->GetFields()->GetCount();
}
return nCount;
}
BOOL CADO::MoveFirst()
{
if(m_bCmd)
{
return FALSE;
}
BOOL bRet = FALSE;
HRESULT ret=S_FALSE;
if(NULL != m_pRecordset)
{
ret = m_pRecordset->MoveFirst();
}
if(ret == S_OK)
{
bRet = TRUE;
}
return bRet;
}
BOOL CADO::MoveLast()
{
if(m_bCmd)
{
return FALSE;
}
BOOL bRet = FALSE;
HRESULT ret=S_FALSE;
if(NULL != m_pRecordset)
{
ret = m_pRecordset->MoveLast();
}
if(ret == S_OK)
{
bRet = TRUE;
}
return bRet;
}
BOOL CADO::MoveNext()
{
if(m_bCmd)
{
return FALSE;
}
BOOL bRet = FALSE;
HRESULT ret=S_FALSE;
if(NULL != m_pRecordset)
{
ret = m_pRecordset->MoveNext();
}
if(ret == S_OK)
{
bRet = TRUE;
}
return bRet;
}
BOOL CADO::MovePrevious()
{
if(m_bCmd)
{
return FALSE;
}
BOOL bRet = FALSE;
HRESULT ret=S_FALSE;
if(NULL != m_pRecordset)
{
ret = m_pRecordset->MovePrevious();
}
if(ret == S_OK)
{
bRet = TRUE;
}
return bRet;
}
BOOL CADO::Move(int nNumRecords)
{
if(m_bCmd)
{
return FALSE;
}
BOOL bRet = FALSE;
HRESULT ret=S_FALSE;
if(NULL != m_pRecordset)
{
ret = m_pRecordset->Move(nNumRecords);
}
if(ret == S_OK)
{
bRet = TRUE;
}
return bRet;
}
BOOL CADO::AdoEof()
{
BOOL bRet = TRUE;
HRESULT ret=1;
if(NULL != m_pRecordset)
{
ret = m_pRecordset->adoEOF;
}
if(ret == 0)
{
bRet = FALSE;
}
return bRet;
}
BOOL CADO::AdoBof()
{
BOOL bRet=TRUE;
HRESULT ret=1;
if(NULL != m_pRecordset)
{
ret = m_pRecordset->adoBOF;
}
if(ret == 0)
{
bRet = FALSE;
}
return bRet;
}
BOOL CADO::SetConnectionString(CString szConnectionString)
{
m_szConnectionString = szConnectionString;
return TRUE;
}
CString CADO::GetConnectionString()
{
return m_szConnectionString;
}
BOOL CADO::SetUdlFileName(CString szUdlFileName)
{
m_szUdlFileName = szUdlFileName;
return TRUE;
}
CString CADO::GetUdlFileName()
{
return m_szUdlFileName;
}
BOOL CADO::SetSQLString(CString szSQL)
{
m_szSQL = szSQL;
return TRUE;
}
CString CADO::GetSQLString()
{
return m_szSQL;
}
HBITMAP CADO::BufferToHBITMAP(char *pBmpBuff)
{
HBITMAP hBmp;
LPSTR hDIB,lpBuffer = pBmpBuff;
LPVOID lpDIBBits;
BITMAPFILEHEADER bmfHeader;
DWORD bmfHeaderLen;
bmfHeaderLen = sizeof(bmfHeader);
strncpy((LPSTR)&bmfHeader, (LPSTR)lpBuffer, bmfHeaderLen);
if(bmfHeader.bfType != ((WORD) ('M' << 8) | 'B'))
{
return NULL;
}
hDIB = lpBuffer + bmfHeaderLen;
BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB;
BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ;
int nColors = bmiHeader.biClrUsed ? bmiHeader.biClrUsed : 1 << bmiHeader.biBitCount;
if(bmInfo.bmiHeader.biBitCount > 8)
{
lpDIBBits = (LPVOID)((LPDWORD)(bmInfo.bmiColors + bmInfo.bmiHeader.biClrUsed) +
((bmInfo.bmiHeader.biCompression == BI_BITFIELDS) ? 3 : 0));
}
else
{
lpDIBBits = (LPVOID)(bmInfo.bmiColors + nColors);
}
HDC hDC = ::GetDC(NULL);
if(hDC != NULL)
{
hBmp = CreateDIBitmap(hDC, &bmiHeader, CBM_INIT, lpDIBBits, &bmInfo, DIB_RGB_COLORS);
}
return hBmp;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -