當前位置:首頁 » 數據倉庫 » mfc訪問mysql資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

mfc訪問mysql資料庫

發布時間: 2022-11-26 16:27:25

1. c++(或MFC)使用mysql資料庫具體該掌握哪些東西,具體怎麼弄

首先,應該熟悉基本的sql語句,至少包括資料庫的創建,建表以及表的增、刪、改、查。這是操作所有資料庫的根本。

然後,因為具體的資料庫有其自身的特性,你使用的是MySQL,那麼你需要了解MySQL裡面那些相應操作的具體語句。我的建議是,先安裝好MySQL,在命令行登錄連接資料庫,然後在命令行中練習,直到對資料庫的基本操作(特別是表的增刪改查)都很熟練。至於MySQL的可視化界面,那隻是為了方便這些操作的。如果你只是弄一個小程序,可以不用可視化界面。

之後,應該學習如何在程序中操作資料庫。這個我想和MFC還是C++沒有太大的關系。程序中使用資料庫大體上可以分為以下幾步:

  1. 載入驅動

  2. 建立資料庫的連接

  3. 通過上面的連接獲取語句對象

  4. 通過語句對象執行具體的sql語句,獲取並處理結果集

  5. 關閉連接

這每一步都有一些小的知識點,需要你自己去學習。比如載入驅動可能涉及驅動包,建立連接需要知道程序中連接MySQL的url寫法以及用戶名密碼,獲取語句對象分statement和preparestatement,執行sql語句分查詢和更新兩類,關閉連接要有先後等等。這些網上應該都能查到資料,而且操作的步驟都是死的,所以只要會了還是不難。我的建議是,先自己寫個小程序,然後實現在這個程序裡面對資料庫進行操作,只要能夠在這個程序里對資料庫進行查詢了,那麼這個流程你也就熟悉了,那些復雜的操作也就不難實現了。

另外,在程序中操作資料庫和在命令行中操作資料庫相差不大,所以練習好在命令行中使用資料庫很重要。

2. 關於MFC連接MySQL資料庫的問題

我也遇到了,不知道為啥

3. 如何用MFC從MYSQL中讀取數據

//下面的代碼是一個實現C++連接MYSQL資料庫的很好的例子
//這里用了建表,插入,檢索,刪表等常用功能
//我用VC++6.0生成,已經成功連接了。
//在VC++6.0中要想把做一下兩步准備工作才可以。
//(1)Tools->Options->Directories->Include files中添加C:\Program Files\MySQL\MySQL Server 6.0\include
//(2)Tools->Options->Directories->Library files中添加C:\Program Files\MySQL\MySQL Server 6.0\lib\opt
//其實就是將頭文件和庫文件包含進來
//我覺得這個例子寫的很好,再結合自己的試驗,特地介紹給大家!

#include <winsock.h>
#include <iostream>
#include <string>
#include <mysql.h>
using namespace std;

#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "libmysql.lib")

//單步執行,不想單步執行就注釋掉
#define STEPBYSTEP

int main() {
cout << "****************************************" << endl;

#ifdef STEPBYSTEP
system("pause");
#endif

//必備的一個數據結構
MYSQL mydata;

//初始化資料庫
if (0 == mysql_library_init(0, NULL, NULL)) {
cout << "mysql_library_init() succeed" << endl;
} else {
cout << "mysql_library_init() failed" << endl;
return -1;
}

#ifdef STEPBYSTEP
system("pause");
#endif

//初始化數據結構
if (NULL != mysql_init(&mydata)) {
cout << "mysql_init() succeed" << endl;
} else {
cout << "mysql_init() failed" << endl;
return -1;
}

#ifdef STEPBYSTEP
system("pause");
#endif

//在連接資料庫之前,設置額外的連接選項
//可以設置的選項很多,這里設置字元集,否則無法處理中文
if (0 == mysql_options(&mydata, MYSQL_SET_CHARSET_NAME, "gbk")) {
cout << "mysql_options() succeed" << endl;
} else {
cout << "mysql_options() failed" << endl;
return -1;
}

#ifdef STEPBYSTEP
system("pause");
#endif

//連接資料庫
if (NULL
!= mysql_real_connect(&mydata, "localhost", "root", "test", "test",
3306, NULL, 0))
//這里的地址,用戶名,密碼,埠可以根據自己本地的情況更改
{
cout << "mysql_real_connect() succeed" << endl;
} else {
cout << "mysql_real_connect() failed" << endl;
return -1;
}

#ifdef STEPBYSTEP
system("pause");
#endif

//sql字元串
string sqlstr;

//創建一個表
sqlstr = "CREATE TABLE IF NOT EXISTS user_info";
sqlstr += "(";
sqlstr +=
"user_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique User ID',";
sqlstr +=
"user_name VARCHAR(100) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NULL COMMENT 'Name Of User',";
sqlstr +=
"user_second_sum INT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'The Summation Of Using Time'";
sqlstr += ");";
if (0 == mysql_query(&mydata, sqlstr.c_str())) {
cout << "mysql_query() create table succeed" << endl;
} else {
cout << "mysql_query() create table failed" << endl;
mysql_close(&mydata);
return -1;
}

#ifdef STEPBYSTEP
system("pause");
#endif

//向表中插入數據
sqlstr =
"INSERT INTO user_info(user_name) VALUES('公司名稱'),('一級部門'),('二級部門'),('開發小組'),('姓名');";
if (0 == mysql_query(&mydata, sqlstr.c_str())) {
cout << "mysql_query() insert data succeed" << endl;
} else {
cout << "mysql_query() insert data failed" << endl;
mysql_close(&mydata);
return -1;
}

#ifdef STEPBYSTEP
system("pause");
#endif

//顯示剛才插入的數據
sqlstr = "SELECT user_id,user_name,user_second_sum FROM user_info";
MYSQL_RES *result = NULL;
if (0 == mysql_query(&mydata, sqlstr.c_str())) {
cout << "mysql_query() select data succeed" << endl;

//一次性取得數據集
result = mysql_store_result(&mydata);
//取得並列印行數
int rowcount = mysql_num_rows(result);
cout << "row count: " << rowcount << endl;

//取得並列印各欄位的名稱
unsigned int fieldcount = mysql_num_fields(result);
MYSQL_FIELD *field = NULL;
for (unsigned int i = 0; i < fieldcount; i++) {
field = mysql_fetch_field_direct(result, i);
cout << field->name << "\t\t";
}
cout << endl;

//列印各行
MYSQL_ROW row = NULL;
row = mysql_fetch_row(result);
while (NULL != row) {
for (int i = 0; i < fieldcount; i++) {
cout << row[i] << "\t\t";
}
cout << endl;
row = mysql_fetch_row(result);
}

} else {
cout << "mysql_query() select data failed" << endl;
mysql_close(&mydata);
return -1;
}

#ifdef STEPBYSTEP
system("pause");
#endif

//刪除剛才建的表
sqlstr = "DROP TABLE user_info";
if (0 == mysql_query(&mydata, sqlstr.c_str())) {
cout << "mysql_query() drop table succeed" << endl;
} else {
cout << "mysql_query() drop table failed" << endl;
mysql_close(&mydata);
return -1;
}
mysql_free_result(result);
mysql_close(&mydata);
mysql_server_end();

system("pause");
return 0;
}

4. mfc鏈接mysql

一、首先安裝mysql:我這里用的版本是mysql-essential-5.1.45-win32.msi。安裝時遇到一個小問題在這里說一下:首次安裝到最後一步啟動服務時卡住了,電腦死機,我強制退出,結果不能正常運行,然後卸載重裝,由於第一次設置了密碼,即使卸載了文件依然存在,所以第二次安裝遇到設置密碼時它出現要輸入前一次設置的密碼,在這里什麼都不要輸入,不然在最後一步會出錯(我重裝了好幾次,才在上查到是這個問題)。

2
二、VC6.0的設置
(1)打開VC6.0 工具欄Tools菜單下的Options選項,在Directories的標簽頁中右邊的「Show directories for:」下拉列表中選中「Includefiles」,然後在中間列表框中添加你本地安裝MySQL的include目錄路徑。(我的是D:\Program Files\MySQL\MySQL Server 5.0\include)。
(2)在上面說到的「Show directories for:」下拉列表中選中「Library files」,然後添加你本地安裝MySQL的Lib目錄路徑。Lib目錄下還有debug和opt兩個目錄,建議選debug。(我的是D:\Program Files\MySQL\MySQL Server 5.0\lib\debug)。
(3)在「Project settings->Link:Object/library moles」裡面添加「libmysql.lib」。
(4)在你要連接資料庫的文件里加入#include "winsock.h"和#include "mysql.h"兩個文件,這里要注意這兩個頭文件的順序不要顛倒,否則會報錯(這個問題害我了一個上午)。

3
三、資料庫、表的創建
打開「開始->所有程序->MySQL->MySQL Server 5.0->MySQL Command Line Client.exe」,如果沒有設置密碼就直接按回車,會提示伺服器啟動成功。
mysql> SHOW DATABASES;//顯示所有的資料庫,注意一定要 敲「;」後再按回車
mysql> CREATE DATABASE mydb;//創建資料庫mydb
mysql> USE mydb;//選擇你所創建的資料庫mydb
mysql> SHOW TABLES; //顯示資料庫中的表
mysql> CREATE TABLE mytable (username VARCHAR(50), password VARCHAR(200),);//創建一個表mytable: 用戶名;密碼
mysql> DESCRIBE mytable;//顯示表的結構

4
四、VC編程
MYSQL mysql; //資料庫連接句柄
mysql_init (&mysql);
if(!mysql_real_connect(&mysql,"localhost","root","dxd","mydb",3306,NULL,0))
{//mydb為你所創建的資料庫,3306為埠號,可自行設定
AfxMessageBox("資料庫連接失敗");
return FALSE;
}

5
五、通過上述設置、連接即可對資料庫操作了。

5. MFC怎麼連接MYSQL資料庫求詳細。。

用ADO連接SQL資料庫
步驟如下:
1,在頭文件"StdAfx.h"中導入#import "C:/Program Files/Common Files/System/ado/msado15.dll" no_namespace rename("EOF","rsEOF"),記住把這句話放到endif的後面,不然會報錯,這樣處理好之後,編譯後又一個警告,可以忽略
2,在對話框的OnInitDialog()函數中寫上"::CoInitialize(NULL);::AfxOleInit(); 」 在主程序的初始化函數中,它就可以寫一次
3,在對話框類的頭文件中,聲明如下變數:_ConnectionPtr m_pConnection;_RecordsetPtr pRst;
連接資料庫的代碼如下:
try
{
hr=m_pConnection.CreateInstance("ADODB.Connection");

if(SUCCEEDED(hr))
{
hr=m_pConnection->Open("Provider=資料庫的驅動器名稱;Integrated Security=SSPI;Persist Security Info=False;Data Source=資料庫伺服器名;Initial Catalog=連接的資料庫名; User ID=登陸資料庫的名稱;Password=登陸資料庫的密碼;","","",adModeUnknown);
}
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
}
」資料庫的驅動器名稱「在控制面板里,以大圖標查看,可以看到一個"ODBC",雙擊打開,在」驅動程序「裡面在最下面有兩個」SQL Server"和「SQL Native Client"如果你是2000的SQL版本,就選」SQL Server"及「Provider=SQL Server"2005的"Provider=SQL Native Client"Data Source=? ,?的值可以是」localhost"也可以是你的資料庫伺服器的名稱,連接資料庫的時候可以看到,復制一下就可以了。
處理完之後就可以連接到你想要連接的資料庫上了!你下次給點分把!!!

6. mfc中查詢MySQL的數據的代碼

MFC程序訪問資料庫不是那麼簡單的,需要很多初始化代碼,建立ADO連接並使用介面。
網上很多相關完整資料,搜「VC ADO MYSQL」,灰常多。

下面是一個比較精煉的描述:
1、應用程序的stdafx.h頭文件中(也可以在其他合適的地方)包含如下語句。

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

2、鏈接資料庫

CoInitialize(NULL);
//初始化Com組件

_ConnectionPtr
conPtr; //資料庫鏈接指針

//
conPtr.CreateInstance("ADODB.Connection");
//Connection用於與資料庫伺服器的鏈接

conPtr.CreateInstance(__uuidof(Connection));
//Connection用於與資料庫伺服器的鏈接另一種方式

try

{

conPtr->ConnectionTimeout = 5; //設置連接時間

//
MySqlTest為數據源名 localhost表示本地
root表示用戶名 sa表示密碼

//鏈接方式1,使用這種方式鏈接時要注意在設置數據源時一定要選擇一個資料庫

//conPtr->Open("DSN=MySqlTest;server=localhost;","root","sa",adModeUnknown);///連接MySql資料庫(測試成功)

//鏈接方式2採用這種方式鏈接時在創建數據源時沒有必要選擇一個資料庫 conPtr->Open("DSN=MySqlTest;server=localhost;database=test;","root","sa",adModeUnknown);///連接MySql資料庫(測試成功)

}

catch(_com_error e) //捕捉異常

{

AfxMessageBox(e.ErrorMessage());

}

CoUninitialize(); //釋放com組件//不知是否有必要

3、訪問資料庫

_RecordsetPtr recordPtr;//數據集指針

recordPtr.CreateInstance(__uuidof(Recordset));

CString
cmdStr=_T("select name,stuno from
student");//student為表名 該表中有兩個欄位name(字元型)stuno(int型)

try

{

recordPtr->Open(_variant_t(cmdStr),

conPtr.GetInterfacePtr(),

adOpenDynamic,

adLockOptimistic,

adCmdText);

}

catch
(_com_error e)

{

AfxMessageBox(e.Description());

}

while
(!(recordPtr->adoEOF))

{//獲取記錄

CString
name=(CString)recordPtr->GetCollect(_variant_t("name")).bstrVal;

int
no=recordPtr->GetCollect(_variant_t("stuno")).intVal;

recordPtr->MoveNext();

}

recordPtr->Close();//關閉記錄集

recordPtr.Release();//釋放空間

conPtr->Close();//關閉連接

conPtr.Release();//釋放空間

7. MFC向MySQL資料庫寫入數據,中文亂碼怎麼解決

① 首先把MySQL的服務停掉 在運行窗口輸入:net stop mysql
② 把伺服器和客戶端的字元集改成自己想用的字元集:GB2312或是utf8等……
具體操作為:打開mysql安裝目錄下的myini.tet;
找到default-character-set,將其改為自己想用的字元集:GB2312或是utf8等……,要注意的是這里有兩個default-character-set,用ctrl+f定位在文件最前面輸入default就會找到,都要改過來;
③ 重啟MySQL伺服器,在運行窗口輸入:net start mysql
④ 最重要的是一點是,到這里我們已經能夠解決亂碼問題了,可問題是我們依然還會出現亂碼問題,這是因為我們現在的表被創建的時候用的是默認的字元集(latin1),所以這時候我們要把表刪除,然後重建就可以了!

8. mfc 連接mysql ado和其他的區別

ODBC(Open DataBase Connection)開放式系統互連,是一種資料庫訪問協議,提供了訪問資料庫的API介面。基於ODBC的應用程序,對資料庫操作不依賴於具體的DBMS,不直接與DBMS打交道,所有資料庫操作由對應DBMS的ODBC驅動程序完成,即:系統中不需要安裝DBMS系統,如SQL SERVER 2005,但必須有SQL SERVER 2005的ODBC驅動程序,然後在ODBC管理器中注冊數據源後,就可以在應用程序中通過ODBC API訪問該資料庫。
ODBC資料庫訪問技術只適用於windows系統,因為需要在ODBC驅動程序管理器中進行數據源注冊,而只有windows才集成了ODBC驅動程序管理器(「控制面板/管理工具/數據源」)。
ADO(ActiveX Data Object)具有跨系統平台特性,它直接對DBMS資料庫進行操作,即系
統中必須有DBMS,但不需要驅動程序,不需要注冊數據源,所以具有很好的可移植性。
VC++6中這兩種技術所涉及到的MFC類:
MFC ODBC類包括CDatabase類 CRecordSet類 CRecoreView類 CFieldExchange類 CDBException類,具體說明請詳見任何一本講述資料庫編程技術的參考書。
ADO是data object,即數據對象的意思,先看一些它包括哪些常用對象:
Command對象 Connection對象 Error對象 RecordSet對象 Field對象 Parameter對象,對應到MFC ADO類,主要有_ConnectionPtr _RecordsetPtr等類。
基於ODBC和ADO的VC++應用程序設計概述
習慣上建立基於文檔視圖的應用程序時,使用ODBC訪問方法,創建應用程序時,需要在step 2 of 6 what database support would you like to include中選擇"database view with file support"載入你要訪問的資料庫,如果在此選擇None,後期編程載入資料庫相當麻煩,請注意。(如果一個資料庫中有多個表,可在此選擇一個表進行類定義,默認類名為"工程名+Set",可在應用程序創建完成前最後一步進行改名;然後在編程時建立其他基於CRecordSet的資料庫表類)
如果在step 2中設置訪問的資料庫和表,則在生成的應用程序框架的XXSet類中會自動載入對資料庫和表的連接訪問操作,當然你最好重新進行定義;系統只有在必要時才會調用GetDefaultConnection和GetDefaultSQL返回預設的資料庫連接定義和SQL語句。
當然也可以建立基於對話框的資料庫訪問應用程序,思路差不多,請讀者自行參悟。
習慣上當建立基於對話框的應用程序時,選擇使用ADO技術。對於小程序,在StdAfx.h中引入ADO動態連接庫,在C***APP中應初始化COM庫環境,創建和關閉ADO連接。對於大型項目,通過自定義的ADOConnection類封裝資料庫操作的各種介面。

9. C++ MFC連接Mysql資料庫 要比較詳細一點的步驟 ,網上的都太亂,是不是最開始要下載一個什麼驅動

額 你去官網下載一個mysql安裝包就可以了 有靜態庫 不需要什麼驅動的
這里有網只 下載安裝 然後再加入mysql.lib和mysql.h到vs中 就可以了
http://dev.mysql.com/downloads/mysql/5.0.html#win32