本文主要向大家介绍了VC编程之vc连接mysql数据库的方法,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。
前段时间项目中用的是mysql数据库,它的连接方法有二种,一种是数据库自带的API,还有一种就用ADO连接了。
由于本次项目用的mysql数据库只是暂时的,后期可能会更改为MSSQL,所以如果用mysql自带的API连接移植性不好,所以改为ADO的,到时只要修改下字符串连接值就行了。
其实ADO连接的底层也是调用的ODBC驱动去连接,所以需要去下载个数据库对应的ODBC驱动,别人说秘本需要对应,要不然连接不上,我没有做太多测试,自己用的6.0版本,所以去官网下载了个mysql-connector-odbc-5.3.4-winx64版本的,然后对应的字符串为:driver={MySQL ODBC 5.3 ANSI Driver};Server=localhost;DATABASE=*;USER=*;PASSWORD=*;OPTION=3;
实测是可以连接成功的。
下面放出自己写的一个超级简单的类:#pragma once#import no_namespace rename("EOF", "adoEOF")// #import "msado15.DLL" rename_namespace("ADOWE") rename("EOF","adoEOF") // using namespace ADOWE;class CAdoDatabase{public: CAdoDatabase(void);public: ~CAdoDatabase(void);public: //BOOL Connect(CString csConnectStr,CString csUser,CString csPasswd); //连接 BOOL Connect(CString csConnectStr); //断开连接 BOOL DisConn(); //执行语句 BOOL Execute(CString csSQL); //是否连接 BOOL IsConn(); //返回结果的行数 int QueryDataForRecord(CString csSql,CStringArray& csa);private: _ConnectionPtr m_pConn; _RecordsetPtr m_pRecord;};
实现:BOOL CAdoDatabase::Connect(CString csConnectStr){ HRESULT hr; try { hr = m_pConn.CreateInstance(__uuidof(Connection)); //hr = m_pConn.CreateInstance("ADODB.Connection"); //m_pConn->Open(_bstr_t(csConnectStr),"","",ADODB::adConnectUnspecified); m_pConn->Open(_bstr_t(csConnectStr),"","",adModeUnknown); return TRUE; } catch (_com_error e) { CString csErrorMsg; csErrorMsg.Format(_T("连接数据库出错:%s"),e.ErrorMessage()); AfxMessageBox(csErrorMsg,MB_OK+MB_ICONERROR); return FALSE; }}BOOL CAdoDatabase::DisConn(){ if (m_pConn->State) { m_pConn->Close(); m_pConn = NULL; return TRUE; } return FALSE;}BOOL CAdoDatabase::Execute(CString csSQL){ try { _variant_t RecordsAffected; m_pConn->Execute((_bstr_t)csSQL,&RecordsAffected,adCmdText); return TRUE; }catch(_com_error e) { CString csMsg; csMsg.Format(_T("执行SQL语句出错:%s"),e.ErrorMessage()); AfxMessageBox(csMsg,MB_OK+MB_ICONERROR); return FALSE; }}int CAdoDatabase::QueryDataForRecord(CString csSql, CStringArray &csa){ try { m_pRecord.CreateInstance(__uuidof(Recordset)); //m_pRecord->Open((_bstr_t)csSql,m_pConn.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText); m_pRecord->Open((_bstr_t)csSql,_variant_t((IDispatch *)m_pConn, true),adOpenKeyset,adLockReadOnly,adCmdText); int nCount; int nRowCount = 0; nCount = m_pRecord->Fields->GetCount(); _variant_t vt; while (!m_pRecord->adoEOF) { for (int i=0; iFields->GetItem(long(i))->GetValue(); if (vt.vt == VT_NULL) { vt = _T(""); } csa.Add(vt); } nRowCount++; m_pRecord->MoveNext(); } m_pRecord->Close(); return nRowCount; }catch(_com_error e) { CString csMsg; csMsg.Format(_T("查询语句出错:%s"),e.ErrorMessage()); AfxMessageBox(csMsg,MB_OK+MB_ICONERROR); return -1; }}
此代码运行平台为WIN7,我把它放到XP上运行时,提示无效指针,网上查了下是平台兼容性的问题,换到其它WIN7电脑上可成功运行。
以上就介绍了VC/MFC的学习,希望对VC/MFC有兴趣的朋友有所帮助。了解更多内容,请关注职坐标编程语言VC/MFC频道!