简介
:操作基于C++和SQL语句的基础调用ADO接口实现对ACCESS的增删改查,操作之前需要应用“msado15.dll”的库下。增加,修改,删除的代码格式是一样的,对SQL的语法简单修改就可实现,对SQL语句不清楚的可以去了学习一些;
修改
接下来用修改的代码做演示:
其操作大致流程就是 输入 SQL 并在语句中设置可替换标记符号@XXX 并在给@XXX 赋值。
void updata()
{
HRESULT hr;
_ConnectionPtr pConn;
hr = pConn.CreateInstance(__uuidof(Connection));
//需要用;分割 (所有SQL里的符号全为英文输入)
_bstr_t connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= Path;";
pConn->Open(connStr, "", "", adConnectUnspecified);
try{
_CommandPtr pCmd;
hr = pCmd.CreateInstance(__uuidof(Command));
if (FAILED(hr)) {
throw _com_error(hr);
}
//UPDATE :更新 DELETE: 删除 INSERT INTO:添加 修改后
_bstr_t updata = "UPDATE tb_UserInfo SET [UserName] = @columnName3 WHERE [UserName] = @columnName1";
pCmd->CommandText = updata;
pCmd->ActiveConnection = pConn.GetInterfacePtr();
pCmd->CommandType = adCmdText;
_ParameterPtr pParam = pCmd->CreateParameter("@columnName1", adVarChar, adParamInput, 50, "AAAAA");
pCmd->Parameters->Append(pParam);
_ParameterPtr pParam2 = pCmd->CreateParameter("@columnName3", adVarChar, adParamInput, 50, "Kelly_1");
pCmd->Parameters->Append(pParam2);
pCmd->Execute(NULL, NULL, adCmdText);
pConn->Close();
} catch (_com_error& e) {
std::cerr << "Error: " << static_cast<const char*>(e.Description()) << std::endl;
}
}
使用方法前需要初始化 com组件 ::CoInitialize(NULL); 然后在解释后释放 CoUninitialize();。
查询
此操作与之前的稍有差异。
void GetValue()
{
HRESULT hr;
::CoInitialize(NULL);
// 创建 ADO 连接对象
_ConnectionPtr pConn;
hr = pConn.CreateInstance(__uuidof(Connection));
_bstr_t connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= <access 全路径>;";
pConn->Open(connStr, "", "", adConnectUnspecified);
// 查询数据
// 插入数据
try{
_RecordsetPtr pRs;
hr = pRs.CreateInstance(__uuidof(Recordset));
if (FAILED(hr)) {
throw _com_error(hr);
}
_bstr_t query = "SELECT * FROM tb_UserInfo";//后可接where 赋值操作如上
pRs->Open(query, pConn.GetInterfacePtr(), adOpenForwardOnly, adLockReadOnly, adCmdText);
//从搜索出来的表中循环每一行的值 此操作需要与数据库保持连接
while (!pRs->adoEOF) {
_variant_t value = pRs->Fields->GetItem("UserName")->GetValue();//获取每一行标题为UserName的值
_variant_t value_2 = pRs->Fields->GetItem("Password")->GetValue();//获取每一行标题为Password的值
std::cout << "UseName:"<<static_cast<const char*>(_bstr_t(value))<<
"\tPassword:"<<static_cast<const char*>(_bstr_t(value_2)) << std::endl;
pRs->MoveNext();//得到下一行的值
}
pRs->Close();
}
catch (_com_error& e) {
std::cerr << "Error: " << static_cast<const char*>(e.Description()) << std::endl;
}
CoUninitialize();
}
操作起来异曲同工,主要就是对SQL的应用。