1. 程式人生 > >C++通過ADO呼叫儲存過程

C++通過ADO呼叫儲存過程

#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;
}