VC++连接MYSQL数据库

本文详细介绍了如何使用ADO(ActiveX Data Objects)连接数据库并封装ADO对象类ADOConn,包括预处理指令的使用、获取MYSQL的ADO连接字符串步骤、ADOConn类的实现与应用。通过实例演示了如何在工程中加入封装类,并提供了ADO知识的概述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MFC 连接数据库及封装ADO对象类ADOConn()

1 、使用预处理指令 #import
 
     #import "C:\Program Files\Common Files\System\ADO\msado15.dll"  no_namespace rename("EOF", "EndOfFile")

    但要注意不能放在 stdAfx.h 文件的开头,而应该放在所有 include 指令的后面。否则在编译时会出错。

    首先你正确安装了MYSQL的数据库驱动程序(mysql-connector-odbc-5.1.6-win32.msi 

   1.在桌面上新建一个空的文本文件mysql.txt,重命名为mysql.udl

   2.双击这个mysql.udl文件,打开数据库连接属性对话框,在提供程序页选择”Micrsoft Ole DB Provider for ODBC Drivers“点击下一步;

   3.连接页的,"指定数据源"选择"使用连接字符串"

   4.点击编译,弹出选择数据源,在文件数据源页中点击新建,在创建新数据源选择MYSQL的驱动程序”MySQL ODBC 5.1 Driver"

   5.点击下一步,点击"浏览",另存为对话框中文件名称写入“mysql",点击下一步,点击完成

   6."MySQL Connnettor/ODBC Data Source Configuration"对话框中按需求(如下图);

   7.点击“Test”,看连接是否成功,连接成功会有个”Connenction successful“提示框,需要更详细的设置点击“Details”,点击”OK“,设置完成;

   8.返回数据库连接属性对话框,点击测试连接,成功的话就是我们要的连接字符串。

   下面是我本机测试的ADO连接字符串,服务器localhost,数据库meismon,用户名root,密码123456

Provider=MSDASQL.1;Persist Security Info=True;Extended Properties="Driver=MySQL ODBC 5.1 Driver;SERVER=localhost;UID=root;PWD=123456;DATABASE=seismon;PORT=3306;COLUMN_SIZE_S32=1"


注:关闭数据库连接属性后再次双击mysql.udl打开该对话框,会因为密码丢失问题点击测试连接会连接不上,把数据库连接属性对话框上的密码等补全就可以了,用文本方式打开mysql.udl文件就是完整的连接字符串。


注:关闭数据库连接属性后再次双击mysql.udl打开该对话框,会因为密码丢失问题点击测试连接会连接不上,把数据库连接属性对话框上的密码等补全就可以了,用文本方式打开mysql.udl文件就是完整的连接字符串。

     
// ADOConn.h: interface for the ADOConn class.
 //
 //////////////////////////////////////////////////////////////////////
 //#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename//("EOF","adoEOF") rename("BOF","adoBOF")
 
 #if !defined(AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_)
 #define AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_
 
 #if _MSC_VER > 1000
 #pragma once
 #endif // _MSC_VER > 1000
 
 class ADOConn  
 {
   // 定义变量
   public:
   _ConnectionPtr m_pConnection;//添加一个指向Connection对象的指针
   _RecordsetPtr m_pRecordset;  //添加一个指向Recordset对象的指针

   // 定义方法
   public:

   ADOConn();
   virtual ~ADOConn();
   void  OnInitADOConn();                        // 初始化—连接数据库
   _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL); // 执行查询
   BOOL ExecuteSQL(_bstr_t bstrSQL);             // 执行SQL语句,Insert Update
   void ExitConnect();                           //断开数据库连接
   void CloseRecordset();                        //关闭记录集
 };
 
 #endif // !defined(AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_)

// ADOConn.cpp: implementation of the ADOConn class.
 //
 //////////////////////////////////////////////////////////////////////
 
 #include "stdafx.h"
 #include "ADOConn.h"
 
 #ifdef _DEBUG
 #undef THIS_FILE
 static char THIS_FILE[]=__FILE__;
 #define new DEBUG_NEW
 #endif
 
 //////////////////////////////////////////////////////////////////////
 // Construction/Destruction
 //////////////////////////////////////////////////////////////////////
 
 ADOConn::ADOConn()
 {  
 }
 
 ADOConn::~ADOConn()
 {
 }
 
 // 初始化—连接数据库
 void  ADOConn::OnInitADOConn()
 {
    ::CoInitialize(NULL);// 初始化OLE/COM库环境
    try
    {
      
       //m_pConnection.CreateInstance("ADODB.Connection");    // 创建Connection对象
       m_pConnection.CreateInstance(__uuidof(Connection));    // 创建Connection对象

       //设置链接字符串 
	   _bstr_t strConnect="Driver=MySQL ODBC 5.1 Driver;SERVER=127.0.0.1;UID=root;DATABASE=test;PORT=3306"; 
       m_pConnection->Open(strConnect,"root","nfz",adModeUnknown);
    } 
   catch(_com_error e)                                  // 捕捉异常
   { 
       AfxMessageBox(e.Description());                  // 显示错误信息
   }
 }
 
 _RecordsetPtr&  ADOConn::GetRecordSet(_bstr_t bstrSQL) //打开记录集
 {
    try
    {
      if(m_pConnection==NULL)  // 连接数据库,如果Connection对象为空,则重新连接数据库
       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;                               // 返回记录集
 }
 
 // 执行SQL语句,Insert Update _variant_t
 BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
 {
    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;
	}
 }

 //关闭记录集
 void ADOConn::CloseRecordset()
 {
   if (m_pRecordset != NULL)
    m_pRecordset->Close();
 }

 // 断开连接
 void ADOConn::ExitConnect()
 {
	m_pConnection->Close();  //关闭链接
    m_pRecordset.Release();  //释放COM接口的引用计数
    m_pConnection.Release(); //释放COM接口的引用计数
   ::CoUninitialize();       // 释放环境
   
 }

    编写好封装类: ADOConn。 在一个工程里加入该类的方法为:把该类的头文件和 cpp 文件拷贝到工程所在的文件夹里。然后在工程的工作区选择 Project->Add to Project->Files, 将这两个文件选择加入。之后,就可以在程序里应用这个类了。

参考博文:

              http://hi.baidu.com/odavis/item/6133af3959d9fefc2784f461

             ADO知识介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值