您的位置:首页 > 数据库

VC使用ADO访问sql server数据库

2015-05-31 13:37 375 查看
软件:vs2010、sql server2005

代码如下:

#include <cstring>

#include <iostream>

using namespace std;

//1、添加对ADO的支持

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

int main()

{

CoInitialize(NULL);

//2、创建实例

_ConnectionPtr pCon(__uuidof(Connection));

_RecordsetPtr pReS(__uuidof(Recordset));

_CommandPtr pCmd(__uuidof(Command));

//3、打开数据库连接

try{

//pCon->Open("Provider=SQLOLEDB;Data Source=Localhost;Initial Catalog=QPTreasureDB;uid=sa;pwd=123;","","",adConnectUnspecified);

pCon->Open("Provider=SQLOLEDB;Data Source=Localhost;uid=sa;pwd=123;","","",adConnectUnspecified);

}

catch(...){

cout<<"打开数据库失败。。。"<<endl;

goto endA;

}

//4、读取数据(对upadate类似操作都可以用_ConnectionPtr的Execute即可,不需要后面步奏;而select时,不管是用_ConnectionPtr还是

//_RecordsetPtr还是_CommandPtr都会直接(参数)或间接(返回值)使用到_ConnectionPtr和_RecordsetPtr同时使用才能得到结果,实例如下)

LPCTSTR strSql="SELECT sum(Score) Score FROM QPTreasureDB.dbo.GameScoreInfo";

try

{

//---------方式 1)、_ConnectionPtr----------------

pReS=pCon->Execute(_bstr_t(strSql),NULL,adCmdText);

//---------方式 2)、_RecordsetPtr----------------

//pReS->Open(_variant_t(strSql),(_variant_t)( (IDispatch*)pCon),adOpenDynamic,adLockOptimistic,adCmdText);

//---------方式 3)、_CommandPtr----------------

//pCmd->put_ActiveConnection((_variant_t)((IDispatch*)pCon));

//pCmd->CommandText=_bstr_t(strSql);

//pReS=pCmd->Execute(NULL,NULL,adCmdText);

//操作数据

while(!pReS->adoEOF)

{

//_variant_t var=pReS->GetCollect("Score");

//var.ChangeType(VT_DECIMAL); //或者"(DECIMAL)var;"(重载了DECIMAL)

//ULONGLONG score=var.decVal.Lo64;

//重载了ULONGLONG,另外如果查到的Score不是数字而是字符串,则需先_bstr_t转换:_bstr_t(pReS->GetCollect("Score"))

ULONGLONG score=pReS->GetCollect("Score");

cout<<"the Score is "<<score<<endl;

pReS->MoveNext();

}

}

catch(_com_error& e)

{

cout<<"操作数据库时出错:"<<e.Description()<<endl;

goto endA;

}

//释放资源

endA:

try

{

pReS->Close();

pCon->Close();

pReS.Release(); //注意是'.'不是'->'

pCon.Release();

pCmd.Release();

}

catch(_com_error& e)

{

cout<<"释放资源时出错:"<<e.Description()<<endl;

}

CoUninitialize();

system("pause");

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: