• C++ ADO 连接 mysql


    1、安装mysql-5.0.22-win32,mysql-connector-odbc-5.1.12-win32.msi
        然后:开始菜单->设置->控制面板->管理工具->数据源(ODBC)->系统DSN->添加->选择MySQL ODBC 5.1 Driver

    2、首先导入ADO类型库,您的环境中msado15.dll不一定在这个目录下,请按实际情况修改。或者把msado15.dll这个文件拷贝到你的工程目录下,直接#import "msado15.dll" no_namespace ename ("EOF", "adoEOF")包含进来。
    在stdafx.h加入如下代码:

    #include <afxdb.h>        // MFC Automation classes
    #import "C:Program FilesCommon FilesSystemadomsado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")


    3、代码示例:

    .h文件:

    /************************************************************************
    *Copyright:
    *FileName:ADOConn.h
    *
    *Author:wanghaiguang
    *Date:2013-03-07
    *Description:ADO Operate MySql DataBase
    ************************************************************************/

    #pragma once

    class CADOConn
    {
    public:
        CADOConn(void);
        ~CADOConn(void);

    public:
        //添加一个指向Connection对象的指针:
        _ConnectionPtr m_pConnection;
        //添加一个指向Recordset对象的指针:
        _RecordsetPtr m_pRecordset;
        // 定义方法
    public:
        // 初始化—连接数据库
        void OnInitADOConn();
        // 执行查询
        _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
        // 执行SQL语句,Insert Update _variant_t
        BOOL ExecuteSQL(_bstr_t bstrSQL);
        void ExitConnect();
    };


    .cpp文件:

    #include "StdAfx.h"
    #include "ADOConn.h"

    CADOConn::CADOConn(void)
    {
    }

    CADOConn::~CADOConn(void)
    {
    }

    /************************************************************************
    *Function   : OnInitADOConn
    *Description: Init DataBase Connect
    *param      : bconString[in] ()
    *return     : void
    ************************************************************************/
    void  CADOConn::OnInitADOConn()
    {
        // 初始化OLE/COM库环境 
        ::CoInitialize(NULL);
        HRESULT hr;
          
        try
        {
             // 创建Connection对象,可以通过配置文件获取连接信息
             hr = m_pConnection.CreateInstance("ADODB.Connection");
             if(SUCCEEDED(hr))
             {
                 m_pConnection->ConnectionTimeout=600;//设置连接超时时间
                 m_pConnection->CommandTimeout=120;//设置执行命令超时时间
            
                 m_pConnection->Open("DSN=MySqlTest;Server= localhost;Database=school","root","sa",adModeUnknown);
             }
        } 
        // 捕捉异常
        catch(_com_error e)
        {
            // 显示错误信息
            AfxMessageBox(e.Description());
        }
    }

    /************************************************************************
    *Function   : GetRecordSet
    *Description: Select Data
    *param      : bstrSQL[in] SQL
    *return     : _RecordsetPtr
    ************************************************************************/
    _RecordsetPtr&  CADOConn::GetRecordSet(_bstr_t bstrSQL)
    {
        try
        {
            // 连接数据库,如果Connection对象为空,则重新连接数据库
            if(m_pConnection==NULL)
                OnInitADOConn();
            // 创建记录集对象
            m_pRecordset.CreateInstance(__uuidof(Recordset));
            // 取得表中的记录
            m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
        }
        // 捕捉异常
        catch(_com_error e)
        {
            // 显示错误信息
            AfxMessageBox(e.Description());
        }
        // 返回记录集
        return m_pRecordset;
    }

    /************************************************************************
    *Function   : ExecuteSQL
    *Description: Exec SQL For Insert Update _variant_t
    *param      : bstrSQL[in] SQL
    *return     : BOOL
    ************************************************************************/
    BOOL CADOConn::ExecuteSQL(_bstr_t bstrSQL)
    {
        // _variant_t RecordsAffected;
        try
        {
            // 是否已经连接数据库
            if(m_pConnection == NULL)
                    OnInitADOConn();
            // Connection对象的Execute方法:(_bstr_t CommandText, 
            // VARIANT * RecordsAffected, long Options ) 
            // 其中CommandText是命令字串,通常是SQL命令。
            // 参数RecordsAffected是操作完成后所影响的行数, 
            // 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
            // adCmdProc-存储过程;adCmdUnknown-未知
            m_pConnection->Execute(bstrSQL,NULL,adCmdText);
            return true;
        }
        catch(_com_error e)
        {
            AfxMessageBox(e.Description());
            return false;
        }
    }

    /************************************************************************
    *Function   : ExitConnect
    *Description: Exit Connect DataBase
    *param      : 
    *return     : void
    ************************************************************************/
    void CADOConn::ExitConnect()
    {
        // 关闭记录集和连接
        if (m_pRecordset != NULL)
        {
            m_pRecordset->Close();
            //m_pRecordset->Release();
        }
        m_pConnection->Close();
        //m_pConnection->Release();
        // 释放环境
        ::CoUninitialize();
    }


    其他连接数据库:

    BOOL ConnectMySqlFun1()
    {
        CoInitialize(NULL); //初始化Com组件
        conPtr.CreateInstance(__uuidof(Connection)); //Connection用于与数据库服务器的链接另一种方式
        /******************连接数据库********************/
        try
        {
            // MySqlTest为数据源名 localhost表示本地 root表示用户名 sa表示密码
            conPtr->Open("DSN=MySqlTest;server=localhost;database=school;","root","sa",adModeUnknown);///连接MySql数据库(测试成功)
        }
        catch(_com_error e) //捕捉异常
        {
            printf("Connect Error : %s", e.Description());
            return FALSE;
        }

        return TRUE;
    }

    BOOL ConnectMySqlFun2()
    {
        CoInitialize(NULL); //初始化Com组件
        try
        {
            //创建连接对象实例
            conPtr.CreateInstance("ADODB.Connection");
            //设置连接字符串
            //mdb------------------------------------------------
            CString strConnect="DSN=MySqlTest";
            //使用Open方法连接数据库
            conPtr->Open((_bstr_t)strConnect,"root","sa",adModeUnknown);
        }
        catch(_com_error e)
        {
            printf("Connect Error : %s", e.Description());
            return FALSE;
        }
        return TRUE;
    }


    操作MySql数据库:

        CADOConn m_ADO;
        m_ADO.OnInitADOConn();
            
        //设置SELECT语句
        _bstr_t vSQL, vInserSQL;
        vSQL = "select name from teacher";
        //设置INSERT语句
        vInserSQL = "insert into teacher values(27, 'hai', '哈尔滨六中', '1998-05-05')";
        ///执行INSERT语句
        if (m_ADO.ExecuteSQL(vInserSQL))
        {
            printf("Insert Data Successful!!!");
        }

        //执行SELETE语句
        _RecordsetPtr m_pRecordset;
        m_pRecordset = m_ADO.GetRecordSet(vSQL);

        CString name0;
        //返回各列的值
        while (!m_pRecordset->adoEOF)
        {
            name0 = (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("name");
            //CString name=(CString)recordPtr->GetCollect(_variant_t("name")).bstrVal;
            //int no=recordPtr->GetCollect(_variant_t("stuno")).intVal;
            printf("name : %s ", name0);
            m_pRecordset->MoveNext();
        }
        //断开与数据库的连接
        m_ADO.ExitConnect();
  • 相关阅读:
    youku客户端
    youku服务端
    [计算机网络]从页面输入网址,回车到显示内容,这中间到底经历了什么
    [碎碎念]在嘛,吱一声.吱...
    [数据结构与算法]08 队列( Queue )以及队列实现的三种方式( Java 版)
    过年了,随便说点儿啥
    [碎碎念]为什么要写易维护的代码
    [碎碎念]如何成为更好的自己
    [年终总结]愿你在以后的黑暗时刻,都能想起我
    [数据结构与算法]07 关于单链表环的操作( Java 版)
  • 原文地址:https://www.cnblogs.com/hushaojun/p/4918988.html
Copyright © 2020-2023  润新知