MFC+MySQL的數據庫登錄,整了幾天也搜過不少博客資料,出現過各種各樣的bug,最後終於讓爺給整出來了。
注意:
關於軟件的版本問題,mysql、ODBC、vs一定要注意爲統一的x86或x64,以下的教程是x86(即32位的),vs的版本不用特別注意(可以自由選擇),就是mysql和odbc,在安裝的時候一定要選擇一致的版本。我的是mysql server 5.6.47和connector/ODBC 5.3.9.(可以在網上搜索mysql和odbc的32位下載安裝教程)
下面上全程乾貨!!!
第一步 建立基於對話框的mfc登錄界面
給兩個編輯框添加成員變量m_name和m_psd,如圖所示。
關於建立mfc的登錄界面可以看一下我的另一篇博客:
https://blog.csdn.net/qq_43389721/article/details/104729968
第二步,配置環境。
在Debug-屬性-vc++的包含、引用和庫目錄中選擇mysql安裝路徑的include和lib文件(mysql是32位需要在c:/programfiles(x86)裏選擇)。將mysql安裝路徑下lib文件夾中的libmysql.dll文件和libmysql.lib文件複製到工程項目文件夾以及與工程項目同名的文件夾下。
第三步,編寫登錄的代碼。
雙擊登錄按鈕,添加如下代碼。
此處參考文章https://www.cnblogs.com/cfxin/archive/2017/11/24/7889362.html
添加頭文件
#include “winsock2.h” //定義socket
#include “mysql.h” //連接mysql的接口
#pragma comment(lib,“libmysql.lib”)//附加依賴項
GetDlgItem(IDC_EDIT1)->GetWindowText(m_name); //獲得輸入的用戶名
GetDlgItem(IDC_EDIT2)->GetWindowText(m_psw); //獲得輸入的密碼
const char user[] = "用戶名";
const char pswd[] = "密碼";
const char host[] = "localhost";
const char table[] = "表名";
unsigned int port = 3306;
MYSQL_RES *res;
MYSQL_ROW row;
MYSQL mysqlCon;
if (m_name.IsEmpty() || m_psw.IsEmpty())
{
MessageBox(_T("用戶名或密碼不能爲空!"), _T("用戶登錄信息"));
return;
}
mysql_init(&mysqlCon);
if (!mysql_real_connect(&mysqlCon, host, user, pswd, table, port, NULL, 0))
{
AfxMessageBox(_T("訪問數據庫失敗!"));
}
else
{
mysql_query(&mysqlCon, "SET USER GBK"); //設置字符集
AfxMessageBox(_T("訪問數據庫成功!"));
}
CString select_sql_by_user;
select_sql_by_user.Format(_T("select name,psw from admins where name = \'%s\'"), m_name);
int ress = mysql_query(&mysqlCon, (char*)(LPCTSTR)select_sql_by_user);
if (ress == 0) //檢測查詢成功
{
res = mysql_store_result(&mysqlCon);
if (mysql_num_rows(res) == 0) //查詢結果爲空
{
AfxMessageBox(_T("用戶不存在"));
}
else
{
row = mysql_fetch_row(res);
if (m_psw == row[1])
{
mysql_free_result(res);
MessageBox(_T("登錄成功!"));
}
else
{
AfxMessageBox(_T("密碼錯誤!"));
}
}
}
else
{
AfxMessageBox(_T("訪問失敗!"));
}
mysql_close(&mysqlCon);
第四步,在mysql中新建數據庫和表格
如圖
第五步,設置數據源ODBC,選擇32位的
在用戶DSN中點擊添加,選擇MySQL ODBC 5.2aDriver(這個在官網搜索下載)。
填好用戶名和密碼後在database中選擇剛剛建的那個數據庫,點擊OK。
第六步,在vs的類嚮導中新建classs下拉,選擇MFC ODBC consumer,選機器數據源,點擊剛剛新建的數據源,點擊確定。
點擊ok,(其中有一個彈出警告,不用管,點擊確定)
最後編譯發現還是有錯誤,則將預編譯的頭改爲不使用。
最後編譯發現有一個安全問題,則直接點擊error,註釋掉這一句即可。
現在編譯,沒有錯誤,但是訪問失敗(用戶名admin,密碼123),最後改一個地方就ok採用多字符集。
好了,MFC+Mysql實現數據庫登錄的就成功了,在這個過程當中不是一帆風順的,最重要的還是要靠自己一步步解決問題,搜索資料才能成功。
貼上最後成功界面。