VC基于ADO技术访问数据库的方法
ADO是一种微软的数据访问技术。在VC中通过ADO可以很方便地访问数据库。下面将介绍VC基于ADO技术访问数据库的方法。主要分为以下几个步骤:
第一步:导入ADO头文件
在VC工程中,需要导入ADO头文件,才能使用ADO相关的对象和方法。在程序中需要包含头文件“#include
第二步:创建ADO对象
创建ADODB::_Connection对象,用于连接数据库。先定义一个变量,之后调用CoInitialize,再通过CoCreateInstance方法创建_ADODB_ConnectionPtr对象。
ADODB::_ConnectionPtr m_pConn = NULL;
CoInitialize(NULL);
HRESULT hr = m_pConn.CreateInstance(__uuidof(ADODB::Connection));
if(SUCCEEDED(hr))
{
// Connect to the database.
m_pConn->Open("Data Source=(local);Initial Catalog=MyDatabase;Integrated Security=True");
}
第三步:执行SQL语句
执行SQL语句是访问数据库的主要方法。可以使用ADO的_Command对象或_Recordset对象来执行SQL语句。首先创建_ADODB_RecordsetPtr变量,再通过Execute方法执行SQL语句。
ADODB::_RecordsetPtr m_pRecordset = NULL;
_bstr_t bstrSQL = "SELECT * FROM person";
HRESULT hr = m_pRecordset.CreateInstance(__uuidof(ADODB::Recordset));
if(SUCCEEDED(hr))
{
// Execute the SQL statement.
m_pRecordset->Open(bstrSQL, m_pConn.GetInterfacePtr(), ADODB::adOpenStatic, ADODB::adLockOptimistic, ADODB::adCmdText);
}
第四步:获取结果集
执行SQL语句后,需要从_Recordset对象中获取结果集。可以通过ADO的_MoveNext方法遍历结果集,获取每一条记录。
int nID;
_bstr_t bstrName;
while(!m_pRecordset->adoEOF)
{
// Get field values.
nID = m_pRecordset->GetCollect("ID");
bstrName = m_pRecordset->GetCollect("Name");
// Process data.
// ...
// Move to next record.
m_pRecordset->MoveNext();
}
第五步:释放对象资源
完成操作后要及时释放对象的资源,防止内存泄漏。可以在程序退出时释放对象,也可以在需要时手动释放。
// Release resources.
if(m_pRecordset != NULL)
{
m_pRecordset->Close();
m_pRecordset.Release();
}
if(m_pConn != NULL)
{
m_pConn->Close();
m_pConn.Release();
}
CoUninitialize();
示例1:连接数据库并查询记录
ADODB::_ConnectionPtr m_pConn = NULL;
ADODB::_RecordsetPtr m_pRecordset = NULL;
CoInitialize(NULL);
HRESULT hr = m_pConn.CreateInstance(__uuidof(ADODB::Connection));
if(SUCCEEDED(hr))
{
// Connect to the database.
m_pConn->Open("Data Source=(local);Initial Catalog=MyDatabase;Integrated Security=True");
_bstr_t bstrSQL = "SELECT * FROM person";
hr = m_pRecordset.CreateInstance(__uuidof(ADODB::Recordset));
if(SUCCEEDED(hr))
{
// Execute the SQL statement.
m_pRecordset->Open(bstrSQL, m_pConn.GetInterfacePtr(), ADODB::adOpenStatic, ADODB::adLockOptimistic, ADODB::adCmdText);
int nID;
_bstr_t bstrName;
while(!m_pRecordset->adoEOF)
{
// Get field values.
nID = m_pRecordset->GetCollect("ID");
bstrName = m_pRecordset->GetCollect("Name");
// Process data.
// ...
// Move to next record.
m_pRecordset->MoveNext();
}
// Release resources.
m_pRecordset->Close();
m_pRecordset.Release();
}
m_pConn->Close();
m_pConn.Release();
}
CoUninitialize();
示例2:插入记录到数据库中
ADODB::_ConnectionPtr m_pConn = NULL;
ADODB::_CommandPtr m_pCommand = NULL;
CoInitialize(NULL);
HRESULT hr = m_pConn.CreateInstance(__uuidof(ADODB::Connection));
if(SUCCEEDED(hr))
{
// Connect to the database.
m_pConn->Open("Data Source=(local);Initial Catalog=MyDatabase;Integrated Security=True");
hr = m_pCommand.CreateInstance(__uuidof(ADODB::Command));
if(SUCCEEDED(hr))
{
// Execute the insert statement.
_bstr_t bstrSQL = "INSERT INTO person(ID, Name) VALUES(1, 'Tom')";
m_pCommand->CommandText = bstrSQL;
m_pCommand->ActiveConnection = m_pConn.GetInterfacePtr();
m_pCommand->Execute(NULL, NULL, ADODB::adCmdText);
// Release resources.
m_pCommand.Release();
}
m_pConn->Close();
m_pConn.Release();
}
CoUninitialize();
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:VC基于ADO技术访问数据库的方法 - Python技术站