设为首页 收藏本站
查看: 464|回复: 0

[经验分享] vc连接mysql数据库的方法

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-2-6 08:58:22 | 显示全部楼层 |阅读模式
    前段时间项目中用的是mysql数据库,它的连接方法有二种,一种是数据库自带的API,还有一种就用ADO连接了。
    由于本次项目用的mysql数据库只是暂时的,后期可能会更改为MSSQL,所以如果用mysql自带的API连接移植性不好,所以改为ADO的,到时只要修改下字符串连接值就行了。
    其实ADO连接的底层也是调用的ODBC驱动去连接,所以需要去下载个数据库对应的ODBC驱动,别人说秘本需要对应,要不然连接不上,我没有做太多测试,自己用的6.0版本,所以去官网下载了个mysql-connector-odbc-5.3.4-winx64版本的,然后对应的字符串为:
1
driver={MySQL ODBC 5.3 ANSI Driver};Server=localhost;DATABASE=*;USER=*;PASSWORD=*;OPTION=3;



实测是可以连接成功的。
下面放出自己写的一个超级简单的类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#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;
};



实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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电脑上可成功运行。所以也没管它了,有解决的小伙伴,可以提供下方法,谢谢!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-42082-1-1.html 上篇帖子: mysql 动态sql 生成测试数据 下篇帖子: 使用源码安装MySQL使用普通权限启动 数据库 mysql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表