VC++连接MYSQL数据库

来源:互联网 发布:windows tracert 实现 编辑:程序博客网 时间:2024/05/28 23:23

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

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

    但要注意不能放在stdAfx.h文件的开头,而应该放在所有include指令的后面。否则在编译时会出错。
2、自己如何正确获取MYSQL的ADO连接字符串

    首先你正确安装了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知识介绍

0 0