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

📄 ado.cpp

📁 一个用来进行仓库货物管理的小系统.可以移植到PDA上的,请指导.
💻 CPP
字号:
#include "stdafx.h"

#include "Ado.h"

int AdoDB::m_nRef=0;

//类的构造函数{初始化连接}
AdoDB::AdoDB()
{
	HRESULT hr;

	if(m_nRef == 0)
		CoInitializeEx(NULL,COINIT_MULTITHREADED);
	m_nRef++;
	
	//创建连接实例
	hr=m_pConn.CoCreateInstance(__uuidof(Connection));

	if(SUCCEEDED(hr))
		m_bAdoOK=TRUE;
	else
		m_bAdoOK=FALSE;
}

AdoDB::~AdoDB()
{
	m_nRef--;

	if(!m_nRef)
		CoUninitialize();
}
//创建数据库
BOOL AdoDB::CreateDatabase(LPTSTR strDB)
{
	HRESULT hr;
	CComPtr<_Recordset> pRS;

	

	hr=pRS.CoCreateInstance(__uuidof(Recordset));
	if(!SUCCEEDED(hr))
	{
		return FALSE;
	}

	WCHAR strSql[256];
	VARIANT vNull,vSql;

    vNull.vt = VT_ERROR;
    vNull.scode = DISP_E_PARAMNOTFOUND;

	swprintf(strSql,L"CREATE DATABASE '%ls'",strDB);

	vSql.vt=VT_BSTR;
	vSql.bstrVal=SysAllocString(strSql);

	hr=pRS->Open(vSql,vNull,adOpenUnspecified,adLockUnspecified,adCmdText);

	SysFreeString(vSql.bstrVal);

	return SUCCEEDED(hr);
}

//打开数据库
BOOL 
AdoDB::OpenDB(
				LPTSTR strDB,
				LPTSTR strUser,
				LPTSTR strPass
			 )
{
	if(!m_bAdoOK)
		return FALSE;

	HRESULT hr;

	m_pConn->put_Provider(L"cedb");
	//m_pConn->put_Provider(L"Microsoft.SQLSERVER.OLEDB.CE.2.0");
	hr=m_pConn->Open(strDB,strUser,strPass,adModeUnknown);

	return SUCCEEDED(hr);

}

//关闭数据库
BOOL 
AdoDB::CloseDB()
{
	if(!m_bAdoOK)
		return FALSE;

	HRESULT hr;

	hr=	m_pConn->Close();

	return SUCCEEDED(hr);
}

//执行SQL语句
//use in {insert,delete,update}
BOOL
AdoDB::ExecuteSql(
					LPTSTR strSql
				 )
{
	if(!m_bAdoOK)
		return FALSE;

	HRESULT hr;

	AfxMessageBox(strSql);
	hr=m_pConn->Execute(strSql,NULL,0,NULL);


	return SUCCEEDED(hr);
}

//执行查询的SQL
//use in {insert,delete,update}
BOOL
AdoDB::Query(
				LPTSTR strSql
		    )
{
	if(!m_bAdoOK)
		return FALSE;

	

	HRESULT hr;
	CComPtr<_Recordset> pRS;
	hr=pRS.CoCreateInstance(__uuidof(Recordset));
	if(!SUCCEEDED(hr))
		return FALSE;

	VARIANT vNull,vConn,vSql;

	vConn.vt=VT_DISPATCH;
	vConn.pdispVal=m_pConn;
	pRS->put_ActiveConnection(vConn);

	vNull.vt = VT_ERROR;
	vNull.scode = DISP_E_PARAMNOTFOUND;

	vSql.vt=VT_BSTR;
	vSql.bstrVal=SysAllocString(strSql);

	
	AfxMessageBox(L" execute sql");

	hr=pRS->Open(vSql,vNull,adOpenUnspecified,adLockUnspecified,adCmdText);
	
	AfxMessageBox(L" execute sql complete");

	SysFreeString(vSql.bstrVal);
	

	return SUCCEEDED(hr);
}

//执行查询的SQL并返回数据集
//use in return Recordset
BOOL
AdoDB::Query(
		LPTSTR strSql,
		_Recordset **ppRS
	  )
{
	if(!m_bAdoOK)
		return FALSE;

	HRESULT hr;
	CComPtr<_Recordset> pRS;
	hr=pRS.CoCreateInstance(__uuidof(Recordset));
	if(!SUCCEEDED(hr))
		return FALSE;

	VARIANT vNull,vConn,vSql;

	vConn.vt=VT_DISPATCH;
	vConn.pdispVal=m_pConn;
	pRS->put_ActiveConnection(vConn);

	vNull.vt = VT_ERROR;
	vNull.scode = DISP_E_PARAMNOTFOUND;

	vSql.vt=VT_BSTR;
	vSql.bstrVal=SysAllocString(strSql);

	
	hr=pRS->Open(vSql,vNull,adOpenKeyset,adLockOptimistic,adCmdText);
	*ppRS=pRS;
	(*ppRS)->AddRef();

	SysFreeString(vSql.bstrVal);

	return SUCCEEDED(hr);
}

⌨️ 快捷键说明

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