C++ MFC 连接数据库(附工程源码) - Go语言中文社区

C++ MFC 连接数据库(附工程源码)


连接数据库几种方式:

  • SQL SERVER
  • ODBC
  • OLE DB
  • MYSQL

一、MySQL

这里介绍如何连接MySQL数据库,使用的是MySQLworkbench6.3版本,其他版本也可以,安装过程百度

1、表定义

 

开发平台

这里使用的是vs2008版本,建议2010版本,用visualC++也可以,根据情况导入。

界面:

 

代码

自定义了一个CDatabase类,实现数据库操作的封装。

mysql.h等数据库文件见源代码。

#include "StdAfx.h"
#include "MFCDlg.h"
#include <cstring> 
#include <string> 
#include "CDatabase.h"

// 构造函数初始化MYSQL对象
CDatabase::CDatabase()
{
	mysql_init(&mysql);
}

// 析构函数
CDatabase::~CDatabase()
{
	Close();
	mysql_library_end();
}

// 关闭数据库连接
void CDatabase::Close()
{
	if(query)	mysql_free_result(query);
	mysql_close(&mysql);
}

// 打开数据库
bool CDatabase::Open(char* host, char* user, char* pass, char* db)
{
	CString  error;
	if(!mysql_real_connect(&mysql, host, user, pass, db, 3306, NULL, 0))
	{ 		
		error = mysql_error(&mysql);
		AfxMessageBox(error);
		//printf("执行查询操作失败。错误原因: %sn",  mysql_error(&mysql));		
		return false;
	}
	return true;
}

//选择记录
bool CDatabase::Execute(char* sql)
{
	if(mysql_real_query(&mysql, sql, strlen(sql)))	return false;
	query = mysql_use_result(&mysql);
	return true;
}
//设置编码
void CDatabase::SetCode()
{
	//mysql_set_character_set(&mysql, "utf8");
	AfxMessageBox("成功");
}
//获取字段个数
int CDatabase::GetFieldNum()
{
	if (query) return mysql_num_fields(query);
	return 0;
}

//获取记录行
MYSQL_ROW CDatabase::GetRecord()
{
	if (query) 
	{
		row = mysql_fetch_row(query);
		return row;
	}
	return NULL;
}

// 获取记录集
void CDatabase::GetRecords()
{
	query = mysql_use_result(&mysql);
}

// 获取记录集字段值的长度
unsigned long * CDatabase::GetRecordFieldLength()
{
	if (query) return mysql_fetch_lengths(query);
	return NULL;
}
// 显示查询结果集
bool CDatabase::ShowRecords(char* sql)
{
	// 执行查询操作
	if (!Execute(sql)) return FALSE;


	unsigned int nFields = GetFieldNum();

	CEdit* pWnd = (CEdit*)AfxGetApp()->m_pMainWnd->GetDlgItem(IDC_EDIT1);
	while ((row = GetRecord()))
	{
		unsigned long *lengths;
		lengths = GetRecordFieldLength();
		for(UINT i = 0; i < nFields; i++)
		{
			//printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL");
			char *s = new char[200];
			sprintf(s,"%.*s ", (int) lengths[i], row[i] ? row[i] : "NULL");
			
			//CMFCDlg myDialog = new CMFCDlg();
			//((CEdit*)myDialog.GetDlgItem(IDC_EDIT1))->SetWindowText(_T("xxxx"));
			//myDialog->SetWindowText("123")
			int nLength=pWnd->SendMessage(WM_GETTEXTLENGTH);  
			pWnd->SetSel(nLength,  nLength);  
			pWnd->ReplaceSel(s);
			/*m.setedit(s);*/
		}
		//printf("n");
	}

	//printf("--------------------------------------------------n");
	return TRUE;
}

 

源码链接

https://download.csdn.net/download/u011752195/10686142

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u011752195/article/details/82839466
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 21:00:56
  • 阅读 ( 985 )
  • 分类:数据库

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢