C++操作mysql方法總結(2)[轉載]

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   使用   ar   strong   

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)[轉載]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.