C++:ADO操作ACCESS(基础)

本文详细介绍了如何使用C++和ADO接口在ACCESS数据库中进行增删改查操作,包括创建Command和Recordset对象,执行SQL语句(如UPDATE、DELETE和SELECT)以及参数化查询的示例。
摘要由CSDN通过智能技术生成

简介

:操作基于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的应用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值