C++操作mysql方法总结(2)

C++通过ODBC和通过MFC ODBC操作mysql的两种方式

使用vs2013和64位的msql 5.6.16进行操作

项目中使用的数据库名和表数据请参考C++操作mysql方法总结(1)中的介绍

既然使用到了ODBC那么就要需要添加数据源了

控制面板->管理工具->数据源->用户DSN->添加

填写相关的数据库连接配置和使用的数据库,可点击Test进行测试,查看是否成功连接,设置完成后点击OK

其中Data Source Name即MySqlODBC我们会在连接数据库时用到

至此,数据源添加完毕

一、通过ODBC进行操作

开放数据库互连(Open Database Connectivity,ODBC)是微软提供的一组用于数据库访问的规范接口,多数数据库都提供了ODBC驱动

1、新建一个空项目

2、如果使用的mysql是64位的,需要将项目的解决方案平台由win32改成x64

至此,相关配置全部完成

程序代码

main.cpp

#include <Windows.h>
#include <iostream>
#include <iomanip>
#include <sql.h>
#include <odbcss.h>
#include <sqlext.h>
#define MAXBUFLEN   255
#define MaxNameLen  20

#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")

SQLHENV  henv = SQL_NULL_HENV;//定义环境句柄
SQLHDBC  hdbc1 = SQL_NULL_HDBC;//定义数据库连接句柄
SQLHSTMT  hstmt1 = SQL_NULL_HSTMT;//定义语句句柄

using namespace std;
int main()
{
    RETCODE retcode;//错误返回码
    retcode = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);
    if (retcode < 0)//错误处理
    {
        cout << "allocate ODBC Environment handle errors." << endl;
        return -1;
    }
    retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,
        (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
    if (retcode < 0) //错误处理
    {
        cout << "the  ODBC is not version3.0 " << endl;
        return -1;
    }
    retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);
    if (retcode < 0) //错误处理
    {
        cout << "allocate ODBC connection handle errors." << endl;
        return -1;
    }

    char* szDSN = "MySqlODBC";//添加数据源时,为其起的名字
    char* szUID = "root";
    char* szAuthStr = "123456";

    retcode = SQLConnect(hdbc1,
                        (SQLCHAR*)szDSN,
                        (SWORD)strlen(szDSN),
                        (SQLCHAR*)szUID,
                        (SWORD)strlen(szUID),
                        (SQLCHAR*)
                        szAuthStr,
                        (SWORD)strlen(szAuthStr));

    if (retcode < 0) //错误处理
    {
        cout << "connect to  ODBC datasource errors." << endl;
        return -1;
    }

    retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);
    if (retcode < 0)
    {
        cout << "allocate ODBC statement handle errors." << endl;
        return -1;
    }
    retcode = SQLExecDirect(hstmt1, (SQLCHAR*)"SElECT *  FROM book", SQL_NTS);
    if (retcode < 0)
    {
        cout << "Executing statement  throught ODBC  errors." << endl;
        return -1;
    }
    SQLCHAR      bookname[MaxNameLen + 1];
    SQLCHAR         size[MaxNameLen + 1];
    SQLLEN         columnLen = 0;

    retcode = SQLBindCol(hstmt1, 2, SQL_C_CHAR, bookname, MaxNameLen, &columnLen);
    retcode = SQLBindCol(hstmt1, 3, SQL_C_CHAR, size, MaxNameLen, &columnLen);
    while ((retcode = SQLFetch(hstmt1)) != SQL_NO_DATA)
    {
        cout <<setw(9) <<"BookName:" << bookname << endl;
        cout << setw(9) << "Size:" << size << endl;
    }
    system("pause");
}

运行结果

一、通过MFC ODBC进行操作

MFC提供了对ODBC进行了封装,使得利用MFC创建ODBC的应用程序变得简单

1、新建一个win32的控制台应用程序

2、进行以下修改

MFC的使用:在共享DLL中使用MFC

字符集:使用Unicode字符集

3、如果使用的mysql是64位的,需要将项目的解决方案平台由win32改成x64

至此,相关配置全部完成

程序代码

main.cpp

#include "stdafx.h"
#include "afxdb.h"
#include <iostream>
#include <iomanip>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    CDatabase db;

    if (!db.IsOpen())//判断数据库是否已经被打开
    {

        BOOL bflag=     db.Open(NULL, FALSE, FALSE, _T("ODBC;DSN=MySqlODBC;UID=root;PWD=123456"));
        if (!bflag)
        {
            cout << "ERROR" << endl;
        }
    }

    CRecordset rs(&db);
    CString str;
    str.Format(L"select * from book");
    try
    {
        rs.Open(CRecordset::forwardOnly, (L"%s", str));
        short nFields = rs.GetODBCFieldCount();
        while (!rs.IsEOF())
        {

            CDBVariant varValue;
            rs.GetFieldValue(L"bookname", varValue);
            cout << setw(9) << "BookName:" << *varValue.m_pstringA << endl;
            rs.GetFieldValue(L"size", varValue);
            cout << setw(9) << "Size:" << *varValue.m_pstringA << endl;
            rs.MoveNext();
        }
    }
    catch (...)
    {
        cout << "ERRPR" << endl;
    }

    db.Close();
    system("pause");
}

运行结果

C++操作mysql方法总结(2),布布扣,bubuko.com

时间: 2024-11-02 20:01:36

C++操作mysql方法总结(2)的相关文章

转:C++操作mysql方法总结(1)

原文:http://www.cnblogs.com/joeblackzqq/p/4332945.html C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作mysql的两种方式 ? ? 使用vs2013和64位的msql 5.6.16进行操作 ? ? ? ? 项目中使用的数据库名为booktik 表为book ---. (共有30条记录,只列出了部分记录,14-30未列出) 一.通过mysql的C api进行操作 ? ? 1.新建一个空项目 ? ? 2.

C++操作mysql方法总结(1)

列举出了C++操作mysql数据库的几种方法 通过mysql的c api和通过mysql的Connector C++ 1.1.3进行操作的两种方式 使用vs2013和64位的msql 5.6.16进行操作 项目中使用的数据库名为booktik 表为book ………. (共有30条记录,只列出了部分记录,14-30未列出) 一.通过mysql的C api进行操作 1.新建一个空工程 2.将D:\Program Files\MySQL\MySQL Server 5.6\include添加到项目的包含

C++操作mysql方法总结(2)[转载]

C++操作mysql方法总结(2) C++通过ODBC和通过MFC ODBC操作mysql的两种方式 使用vs2013和64位的msql 5.6.16进行操作 项目中使用的数据库名和表数据请参考C++操作mysql方法总结(1)中的介绍 既然使用到了ODBC那么就要需要添加数据源了 控制面板->管理工具->数据源->用户DSN->添加 填写相关的数据库连接配置和使用的数据库,可点击Test进行测试,查看是否成功连接,设置完成后点击OK 其中Data Source Name即MySq

C++操作mysql方法总结(3)[转载]

C++通过mysql++操作mysql的方式 使用vs2013和64位的msql 5.6.16进行操作 项目中使用的数据库名和表数据请参考C++操作mysql方法总结(1)中的介绍 Mysql++ 是官方发布的.一个为MySQL设计的C++语言的API.Mysql++为Mysql的C-Api的再次封装,它用STL(Standard Template Language)开发并编写,并为C++开发者提供像操作STL容器一样方便的操作数据库的一套机制. 下载地址 http://tangentsoft.

C++操作mysql方法总结(3)

C++通过mysql++操作mysql的方式   使用vs2013和64位的msql 5.6.16进行操作 项目中使用的数据库名和表数据请参考C++操作mysql方法总结(1)中的介绍   Mysql++是官方发布的.一个为MySQL设计的C++语言的API.Mysql++为Mysql的C-Api的再次封装,它用STL(Standard Template Language)开发并编写,并为C++开发者提供像操作STL容器一样方便的操作数据库的一套机制. 下载地址 http://tangentso

C++操作mysql方法总结(1)[转载]

C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作mysql的两种方式 使用vs2013和64位的msql 5.6.16进行操作 项目中使用的数据库名为booktik 表为book ………. (共有30条记录,只列出了部分记录,14-30未列出) 一.通过mysql的C api进行操作 1.新建一个空项目 2.将D:\Program Files\MySQL\MySQL Server 5.6\include添加到项目的包含目录中(根据具体路径而定) 3.将

[mysql] C++操作mysql方法总结(1)

From: http://www.cnblogs.com/magicsoar/p/3817518.html C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作mysql的两种方式 使用vs2013和64位的msql 5.6.16进行操作 项目中使用的数据库名为booktik 表为book ………. (共有30条记录,只列出了部分记录,14-30未列出) 一.通过mysql的C api进行操作 1.新建一个空项目 2.将D:\Program Files\M

[mysql] C++操作mysql方法

下载:http://mirrors.sohu.com/mysql/MySQL-5.5/ From: http://www.cnblogs.com/magicsoar/p/3817518.html C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作mysql的两种方式 使用vs2013和64位的msql 5.6.16进行操作 项目中使用的数据库名为booktik 表为book ---. (共有30条记录,只列出了部分记录,14-30未列出) 一.通过mys

Shell操作MySQL方法

方式一: # mysql   -u  root  -h 127.0.0.1  -p -u username -h  host_ip -p"new_pass" -D db_name                          //指定直接进入的数据库 -e  "sql_language"                 //直接在交互中直接执行SQL语句 例如: mysql  -uroot  -hlocalhost  -pmypass  -D  mysql  -