C++通过ADO调用存储过程

很久以前就在网上找了一些关于用C++调用数据库存储过程的文章,并用到了自己的项目中。网上的文章都是要定义_CommandPtr和_ParameterPtr类型的智能指针对象,然后用pCmd->Excute(...)的方法来执行。这样做也没什么不好,就是麻烦了点。这两天突然来了灵感,想到一个更简单的方法:
#include <iostream>
#include <Windows.h>
using namespace std;

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename ("EOF","rsEOF")

int main()
{
	_wsetlocale(NULL,L"chs");
	CoInitialize(NULL);
	_ConnectionPtr pConn(__uuidof(Connection));
	_RecordsetPtr pRst(__uuidof(Recordset));
	
	pConn->ConnectionString = L"provider=msdasql;driver={sql server};server=xxx.xxx.xxx.xxx;uid=xxx;pwd=xxxxx;database=xxxxx";
	pConn->Open("","","",adConnectUnspecified);

	//这一句是执行存储过程的关键
	//GetSchemas2便是存储过程的名称
	//后面括号中的(2,\"zrs\")便是其参数列表
	//注意Open方法的最后一个参数是adCmdStoredProc,而我们平常常用的是adCmdText
	pRst->Open(L"GetSchemas2(2,\"zrs\")",_variant_t((IDispatch*)pConn),adOpenKeyset,adLockOptimistic,adCmdStoredProc);

	if(1 == pRst->State)
	{
		long n = pRst->GetRecordCount();
		wcout<<L"记录行数:"<<n<<endl;
		if(n>0)
		{
			pRst->MoveFirst();
			while(!pRst->rsEOF)
			{
				int ID = pRst->GetCollect(L"ID");
				wstring sname = (_bstr_t)pRst->GetCollect(L"SchemaName");
				int DID = pRst->GetCollect(L"DesignerID");
				wstring name = (_bstr_t)pRst->GetCollect(L"DesignerTrueName");
				int PIR = pRst->GetCollect(L"Prior");
				wcout<<ID<<L"    "<<sname.c_str()<<L"   "<<DID<<L"   "<<name.c_str()<<L"   "<<PIR<<endl;
				pRst->MoveNext();
			}
		}
		pRst->Close();
	}

	pConn->Close();
	pRst.Release();
	pConn.Release();
	CoUninitialize();
	system("pause");
	return -1;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值