VC编程之vc连接mysql数据库的方法
小标 2019-04-02 来源 : 阅读 1184 评论 0

摘要:本文主要向大家介绍了VC编程之vc连接mysql数据库的方法,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

本文主要向大家介绍了VC编程之vc连接mysql数据库的方法,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助。

VC编程之vc连接mysql数据库的方法

    前段时间项目中用的是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 <C:\Program Files\Common Files\System\ADO\msado15.dll> 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; i<nCount; i++)
            {
                vt =m_pRecord->Fields->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频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程