永发信息网

c++访问数据库

答案:2  悬赏:10  手机版
解决时间 2021-01-28 21:02
  • 提问者网友:謫仙
  • 2021-01-28 14:06
求一段利用c++访问数据库并查询数据库返回集合的一段代码

SQL2005 和MySql
最佳答案
  • 五星知识达人网友:毛毛
  • 2021-01-28 15:16
就拿SQL作比方:
首先在头文件中增加以下代码:
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")

这样就可以使用数据库了

然后连接数据库:
CoInitialize(NULL);
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));

pConn->ConnectionString="Provider=SQLOLEDB.1;Persist Security Info=False;User ID=登录用户名;Initial Catalog=数据库名";
pConn->Open("", "登录用户名(如果上一行代码已经指定,此处可不填)", "登录用户密码(没有可不填)", adConnectUnspecified);

然后查询:
pRst=pConn->Execute("SELECt * FROM patient;", NULL, adCmdText);

while (!pRst->rsEOF)
{
_variant_t rs;
rs=pRst->GetCollect("列名");
if (rs.vt != VT_NULL)
{//此处(_bstr_t)rs就是对应列的结果
}
pRst->MoveNext();
}

使用完数据库记得关闭:
pRst->Close();
pConn->Close();
pRst.Release();
pConn.Release();
CoUninitialize();
全部回答
  • 1楼网友:渡鹤影
  • 2021-01-28 15:32
这个过程有点复杂,详细请参阅孙鑫《vc++深入详解》最后一章,hook和数据库访问技术,那里讲得更明白!

#include <iostream>
#include <string>
using namespace std;
//导入ado动态链接库,必须的
#import "c:\program files\common files\system\ado\msado15.dll"no_namespace rename("eof","adoeof")

void main()
{
 _connectionptr m_pconnection; //创建智能指针,必须的
 m_pconnection.createinstance(__uuidof(connection)); //或 m_pconnection.createinstance("adodb.connection");
 coinitialize(null); //初始化com,必须的
 try 
 { 
 //连接字符串,student为数据库名
 m_pconnection->connectionstring="provider=sqloledb.1;password=sa;persist security info=true;user id=sa;initial catalog=student"; 

 m_pconnection->open(" "," "," ",admodeunknown); //调用open方法
 cout<<"1"<<endl;
 } 
 catch(_com_error e) //捕获连接异常
 { 
 cout<<"数据库初始化错误! "<<endl; 
 return ; 
 } 
 cout<<"连接成功!"<<endl;

 _recordsetptr prst(__uuidof(recordset));

 prst=m_pconnection->execute("select * from student",null,adcmdtext);//使用execute方法,student为表名

 if(!prst>adoeof) 
 prst>movefirst(); 
 else 
 { 
 cout<<"表内数据为空"<<endl; 
 return; 
 } 
 // 读入库中各字段并加入列表框中 
 _variant_t var;
 string strname;
 while(!prst>adoeof) 
 { 
 var = prst>getcollect("name"); 
 if(var.vt != vt_null) 
 strname = (lpcstr)_bstr_t(var);
 prst>movenext(); 
 } 

 //关闭
 prst->close();
 m_pconnection->close();
 prst.release();
 m_pconnection->release();

 couninitialize(); //释放com

}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯