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

📄 ado.cpp

📁 vc++的技巧查找方式源代码。
💻 CPP
字号:
// 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();
	///////////////////连接数据库///////////////////
	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环境的,对于ACCESS97,需要改为:Provider=Microsoft.Jet.OLEDB.3.51;
	}
	catch(_com_error e)///捕捉异常
	{
		CString str;
		str.Format("数据库连接失败! \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("创建ADO记录集实例出错!");
		}
	}
	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);
				//复制数据到缓冲区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);
				//复制数据到缓冲区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;
}

⌨️ 快捷键说明

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