mysql(24)-ado-mfc- _ConnectionPtr-_RecordsetPtr-增删改查

该博客介绍了使用ADO库进行数据库操作的基本步骤,包括初始化COM库、建立数据库连接、执行SQL命令以及关闭连接。通过_ConnectionPtr和_RecordsetPtr接口,实现了数据的增删改查。在遇到错误时,代码包含了重试机制。示例中展示了如何存储数据到表格,并提供了CloseRecordset函数来关闭记录集并释放对象。
摘要由CSDN通过智能技术生成

ADO库包含三个基本接口:_ConnectionPtr接口、_CommandPtr接口和_RecordsetPtr接口。
基本流程:
(1)初始化COM库,引入ADO库定义文件
(2)用Connection对象连接数据库
(3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记 录集进行查询、处理。
(4)使用完毕后关闭连接释放对象。
 


(1)初始化:初始化COM库,引入ADO库定义文件

::CoInitialize(NULL);

(2)连接:用Connection对象连接数据库。
_ConnectionPtr m_pConnection;

_ConnectionPtr ConnectDB(_ConnectionPtr pConnection, CString strServerDriver, CString strServerAddress, CString strServerPort, CString strDatabaseName, CString strUserName, CString strPassword)
{
	try
	{
		pConnection.CreateInstance(__uuidof(Connection));
		CString strConnection;
		strConnection = _T("Provider=MSDASQL.1;Persist Security Info=True;Driver=") + strServerDriver + _T(";SERVER=") + strServerAddress + _T(";PORT=") + strServerPort + _T(";DATABASE=") + strDatabaseName + _T(";UserID=") + strUserName + _T("Password=") + strPassword + _T(";UID=") + strUserName + _T(";PWD=") + strPassword + _T(";");
		pConnection->ConnectionTimeout = 15;
		if (pConnection->Open(_bstr_t(strConnection), "", "", adModeUnknown) == 0)
		{
			return pConnection;
		}
	}
	catch (_com_error e)
	{
		g_pMngEvent->AddEvent(_T("操作记录"), m_strName + _T("连接数据库出错,10s后尝试下一次连接"));
		Sleep(10000);
		return ConnectDB(pConnection, strServerDriver, strServerAddress, strServerPort, strDatabaseName, strUserName, strPassword);
	}
}

 _RecordsetPtr m_pRecordset;

_RecordsetPtr GetRecordset(_ConnectionPtr pConnection, _RecordsetPtr pRecordset, CString strSql)
{
	try
	{
		pRecordset.CreateInstance(__uuidof(Recordset));
		pRecordset->CursorLocation = adUseClient;
		pRecordset->Open(_variant_t(strSql), _variant_t((IDispatch*)pConnection, true), adOpenDynamic, adLockOptimistic, adCmdText);
		//pRecordset->Open((_bstr_t)strSql, pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
		return pRecordset;
	}
	catch (_com_error e)
	{
		g_pMngEvent->AddEvent(_T("操作记录"), m_strName + _T("打开数据集出错,10s后尝试下一次打开数据集"));
		Sleep(10000);
		CloseConnection();
		m_pConnection = ConnectDB(m_pConnection, m_strServerDriver, m_strServerAddress, m_strServerPort, m_strDatabaseName, m_strUserName, m_strPassword);
		return GetRecordset(m_pConnection, pRecordset, strSql);
	}
}



(3)执行命令:通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记 录集进行查询、处理。
 

void StoreData2table()    
{ 
  if (m_pRecordset != NULL)
  {
	m_pConnection->BeginTrans();
	int m_size = m_aForecast.GetSize();
	for (int i = 0; i < m_adata.GetSize(); i++)
	{   m_pRecordset->AddNew();
		m_pRecordset->PutCollect("sn", variant_t(data1));
		m_pRecordset->PutCollect("name", variant_t(data2));
		m_pRecordset->PutCollect("id", _variant_t(data3));
    }
	m_pRecordset->UpdateBatch(adAffectAll);
	m_pConnection->CommitTrans();
	CloseRecordset();
	g_pMngEvent->AddEvent(_T("操作记录"), "StoreData2table(),存数据成功!");
 }
}

(4)关闭连接释放对象。
 

void CloseRecordset()
{
	if (m_pRecordset == NULL)
	{
		return;
	}
	if (m_pRecordset->GetState() == adStateOpen)
	{
		m_pRecordset->Close();
	}
	if (m_pRecordset)
	{
		m_pRecordset.Release();
		m_pRecordset = NULL;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值