C++使用ADODB连接数据库
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 用的是ADODB,所以在StdAfx.h文件里面的 #include <afxwin.h> 后面加这句话 2 #import "C:\program files\common files\System\ado\msado15.dll" no_namespace \ 3 rename("EOF", "adoEOF") 4 5 //CDataManage.h 6 定义变量,数据结构(与数据库中表的字段对应,即保存数据表中字段的信息)及函数(CDataManage()构造函数,~CDataManage(){析构函数,Break()断开数据库连接,ConnectDBase(char* DBPath) //连接数据库,ReadDatabaseInfo(ImageInf imageinfo)//读取数据 7 8 ) 9 10 11 //CDataManage.cpp 12 #include "stdafx.h" 13 #include "CDataManage.h" 14 15 extern char g_ImageDBPath[256];//g打头的为全局变量,保存图像路径的变量 16 CDataManage::CDataManage(){ //构造函数 17 m_pConnection=NULL; //初始化连接对象NULL 18 } 19 20 CDataManage::~CDataManage(){//析构函数 21 22 if(m_pConnection!=NULL) 23 { 24 if(m_pConnection->State) 25 m_pConnection->Close(); 26 } 27 m_pConnection=NULL; 28 } 29 void CDataManage::Break(){//断开数据库连接 30 if(m_pConnection!=NULL) 31 { 32 if(m_pConnection->State) 33 m_pConnection->Close(); 34 } 35 m_pConnection=NULL; 36 } 37 38 bool CDataManage::ConnectDBase(char* DBPath){ //连接数据库 39 // AfxOleInit(); 40 HRESULT hr; //创建对象 41 try 42 { 43 hr = m_pConnection.CreateInstance("ADODB.Connection"); //创建Connection对象 44 if (SUCCEEDED(hr)) //创建成功 45 { 46 hr = m_pConnection->Open(DBPath,"","",adConnectUnspecified); 47 //DBPath是字符串类型的数据库存放路径,写时要加双引号 48 //连接数据库注意DataSource路径的写法 49 //AfxMessageBox("连接数据库成功"); 50 } 51 m_pRecordset.CreateInstance("ADODB.Recordset"); 52 } 53 catch(_com_error e) //联接异常处理 54 { 55 CString errorMsg; 56 errorMsg.Format("连接数据库失败\r\n错误信息:%s",e.ErrorMessage()); 57 // AfxMessageBox(e.Description()); 58 return false;//显示错误信息 59 } 60 return TRUE; 61 } 62 63 int CDataManage::ReadDatabaseInfo(ImageInf imageinfo){//读取数据 64 char Sql[100]; 65 CString date; 66 CString UBirth; 67 int year,month,day; 68 _variant_t var; 69 sprintf(Sql,"select * from ImageTable where 数据库字字段='%s'",ImageTable.数据库字字段数据); 70 m_pRecordset->Open(Sql,m_pConnection.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdUnknown); 71 72 if(m_pRecordset->GetRecordCount()>0){//数据库中读取到数据 73 m_pRecordset->MoveFirst(); 74 while(!m_pRecordset->adoEOF){ 75 _variant_t var; 76 var=m_pRecordset->GetCollect(""); 77 78 79 if(m_pRecordset->GetState()==1){ 80 m_pRecordset->Close(); 81 } 82 return 1; 83 } 84 85 if(m_pRecordset->GetRecordCount()>0) { 86 var=m_pRecordset->GetCollect("数据库字段名"); 87 g_ImageDBPath=(char)var;//g_ImageDBPath全局变量里面是图片的路径 88 } 89 } 90 //下面几行是循环读取数据库中的记录,根据情况添加 91 /* if(m_pRecordset->GetRecordCount()>0) 92 imageID=10000+m_pRecordset->GetRecordCount()+1; 93 else imageID=10000+1; 94 */ 95 96 97 } 98 99 100