📄 ado.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 + -