MFC 数据库编程 增删改查的一个例子
1.先看下效果图:
主界面:
一个最简单的1对多的表,一张Article(文章)表,一张Category(类别)表。有添加,修改,删除文章按钮。点击类别编辑按钮就会跳到第二个对话框。点击数据库配置就会跳到第三个对话框。
类别编辑的对话框,类别做了防止重复数据添加的功能。
数据库配置的对话框,记录会保存到文件中。
2.保存数据库信息到文件中。
//写一条记录
WritePrivateProfileString(
LPCSTR lpAppName,
LPCSTR lpKeyName,
LPCSTR lpString,
LPCSTR lpFileName
);
//读一条记录
GetPrivateProfileString(
LPCWSTR lpAppName,
LPCWSTR lpKeyName,
LPCWSTR lpDefault,
LPWSTR lpReturnedString,
DWORD nSize,
LPCWSTR lpFileName
);
程序中保存的样子:
3.连接Sqlserver 2000
记得之前写.NET的程序时,非常简单就一条连接字符串。在MFC用ADO还有点麻烦。
首先要在StdAfx.h文件里添加:
#import "C:\\program files\\common files\\system\\ado\\msado15.dll" rename_namespace("ADOBS") rename("EOF","adoEOF")
using namespace ADOBS;
然后在你MFC主App类的InitInstance方法中添加
AfxOleInit();
最后就是初始化连接数据库:
CMFCDatabaseApp theApp;
_ConnectionPtr m_pCon; //ADO连接对象
_RecordsetPtr m_pRs;
_RecordsetPtr m_pRs1;
_CommandPtr m_pCom; try
{
CString temp;
char filepath[MAX_PATH];
GetModuleFileName(NULL,filepath,MAX_PATH); temp = theApp.ExtractFilePath(filepath);//获取可执行文件的路径 //m_pCon.CreateInstance("ADODB.Connection");
CString strAdoConn;
char temp1[100]; GetPrivateProfileString(ConfigTitle,ConfigServer,"127.0.0.1",temp1,100,temp+ConfigFileName);
strserver = (TCHAR *)temp1;
GetPrivateProfileString(ConfigTitle,ConfigDatabase,"",temp1,100,temp+ConfigFileName);
strdbName = temp1;
GetPrivateProfileString(ConfigTitle,ConfigUser,"sa",temp1,100,temp+ConfigFileName);
strUser = temp1;
GetPrivateProfileString(ConfigTitle,ConfigPWD,"123456",temp1,100,temp+ConfigFileName);
strPassword = temp1;
strAdoConn.Format("driver={SQL Server};SERVER=%s;UID=%s;PWD=%s;DATABASE=%s",
strserver, strUser, strPassword, strdbName);
m_pCon.CreateInstance(_uuidof(Connection));
m_pCon->ConnectionString = (_bstr_t)strAdoConn;
m_pCon->Open("","","",NULL);
m_pCom.CreateInstance("ADODB.Command");
m_pRs.CreateInstance(_uuidof(Recordset)); m_pRs1.CreateInstance(_uuidof(Recordset));
// ADOFLAG = TRUE; }
catch(_com_error)
{
//ADOFLAG = FALSE;
//Flag = FALSE;
MessageBox(0,"请检查系统配置信息", "数据库连接失败",MB_OK);
return;
}
catch(...)
{
AfxMessageBox("SYS Error");
return ;
}
你最好还是下载整个程序看下比较清楚。这程序用的是MFC + Sqlserver2000。说起来也不好意思,2013年了还在用Sqlserver2000。没办法,一个很老的项目。
4.执行Sql语句
void CMFCDatabaseDlg::OnButtonAdd()
{ CString title, body, author;
GetDlgItemText(IDC_EDIT_TITLE, title);
GetDlgItemText(IDC_EDIT_BODY, body);
GetDlgItemText(IDC_EDIT_AUTHOR, author);
int categoryId = m_categories.GetItemData(m_categories.GetCurSel()); CString sql;
sql.Format("Insert into Article(Title, Body, Author, CategoryId) values('%s','%s','%s',%d)",title,body,author,categoryId);
try
{
m_pRs->raw_Close();
m_pRs->Open((_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);
MessageBox("操作成功.","提示",MB_OK|MB_ICONINFORMATION);
LoadArticleInfo();
}
catch (...)
{
AfxMessageBox("操作失败");
}
}
多的就不写出来了,大部分就是这种裸sql语句,想了下之前写ASP.NET MVC 用的linq to sql,一下子回到了解放前。
写完这个程序的感觉就是,MFC做做简单的小应用还是不会难的,它封装了太多,微软的工具还是蛮好用的。
5.怕上传的数据库有问题,把建表语句写在这里
记得没有包含建数据库的语句,读者可以自己建一个叫做"MFCDatabase"的数据库。
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[FK_Article_Category]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[Article] DROP CONSTRAINT FK_Article_Category
GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Article]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Article]
GO if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Category]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Category]
GO CREATE TABLE [dbo].[Article] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[Title] [char] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[Body] [ntext] COLLATE Chinese_PRC_CI_AS NULL ,
[Author] [char] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[CategoryId] [int] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO CREATE TABLE [dbo].[Category] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[CategoryName] [char] (30) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
项目下载:http://www.waitingfy.com/?attachment_id=595
原文链接:http://www.waitingfy.com/?p=584
MFC 数据库编程 增删改查的一个例子的更多相关文章
- shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查)
shell编程系列22--shell操作数据库实战之shell脚本与MySQL数据库交互(增删改查) Shell脚本与MySQL数据库交互(增删改查) # 环境准备:安装mariadb 数据库 [ro ...
- 【转载】通过JDBC对MySQL数据库的增删改查
通过JDBC进行简单的增删改查(以MySQL为例) 目录 前言:什么是JDBC 一.准备工作(一):MySQL安装配置和基础学习 二.准备工作(二):下载数据库对应的jar包并导入 三.JDBC基本操 ...
- Mybatis学习笔记(二) 之实现数据库的增删改查
开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...
- 用C#实现对MSSqlServer数据库的增删改查---DAL层
说明:本人完成的工作是对传感器--超声波物位计进行硬件集成,上位机通过串口接收传感器数据并将其存到数据库中:在DAL层实现对数据库的增删改查,其中包含两个数据表分别是WaterLevelSet表和Wa ...
- [译]聊聊C#中的泛型的使用(新手勿入) Seaching TreeVIew WPF 可编辑树Ztree的使用(包括对后台数据库的增删改查) 字段和属性的区别 C# 遍历Dictionary并修改其中的Value 学习笔记——异步 程序员常说的「哈希表」是个什么鬼?
[译]聊聊C#中的泛型的使用(新手勿入) 写在前面 今天忙里偷闲在浏览外文的时候看到一篇讲C#中泛型的使用的文章,因此加上本人的理解以及四级没过的英语水平斗胆给大伙进行了翻译,当然在翻译的过程中发 ...
- ThinkPHP实现对数据库的增删改查
好久都没有更新博客了,之前老师布置的任务总算是现在可以说告一段落了,今天趁老师还没提出其他要求来更新一篇博客. 今天我想记录的是我之前做项目,自己所理解的ThinkPHP对数据库的增删改查. 首先要说 ...
- Android学习---数据库的增删改查(sqlite CRUD)
上一篇文章介绍了sqlite数据库的创建,以及数据的访问,本文将主要介绍数据库的增删改查. 下面直接看代码: MyDBHelper.java(创建数据库,添加一列phone) package com. ...
- Android SQL语句实现数据库的增删改查
本文介绍android中的数据库的增删改查 复习sql语法: * 增 insert into info (name,phone) values ('wuyudong','111') * 删 delet ...
- java jdbc 连接mysql数据库 实现增删改查
好久没有写博文了,写个简单的东西热热身,分享给大家. jdbc相信大家都不陌生,只要是个搞java的,最初接触j2ee的时候都是要学习这么个东西的,谁叫程序得和数据库打交道呢!而jdbc就是和数据库打 ...
随机推荐
- 基于 自己定义注解 和 aop 实现使用memcache 对数据库的缓存 演示样例
好久没更新blog了,在新公司打拼了两个月,每天都从早忙到晚,学到了非常多东西,可是没有时间来更新blog了.... 以下開始解说这次的主题 公司老大让我研究 ocs 就是阿里云的 开放缓存服务 点击 ...
- OpenVPN多实例优化的思考过程
1.sss 当构建组件之间的关系已经错综复杂到接近于一张全然图的时候,就要换一个思路了,或者你须要重构整个系统,或者你将又一次实现一个. 2.TAP网卡和TUN网卡 2.1.TAP的优势 1.方便组网 ...
- 高性能双端js模板---simplite
simplite是一款js实现的模板引擎,它能够完成浏览器端js模版和node服务器端js模板的数据渲染,渲染性能达到引擎的极限. 渲染性能十分突出. 支持浏览器端和node服务器端模板渲染. 它简单 ...
- js 正则之 判断密码类型
原文:js 正则之 判断密码类型 今天没啥写的,就分享个思路吧.之前在群里讨论的时候,谢亮兄弟说判断密码是否是纯数字,纯字母之类的.如果用 , 条判断,那就老长一大段了.这个思路是我之前看 jQuer ...
- Linux之ftp命令使用
一:前言 在达内參加暑期社会实践,达内公司免费教授了一星期的课,当时认为老师用ftp命令用的非常爽.所以回来学学了. 二:分类 有关FTP(client,server搭建这里不讲)有非常多,大体分为命 ...
- jQuery数字加减插件
jQuery数字加减插件 我们在网上购物提交订单时,在网页上一般会有一个选择数量的控件,要求买家选择购买商品的件数,开发者会把该控件做成可以通过点击实现加减等微调操作,当然也可以直接输入数字件数.本文 ...
- 数以百万计美元的融资YO是什么东东?
给自己做个广告哈,新栏目"面试"已经推出,回复"面试"就可以获取. 这两天最火的应用是什么.非yo莫属,堪称史上最简单的社交应用,仅仅能向好友发送一个yo. 出 ...
- 我的vi/vim配置文件
位于/etc/vim/的vimrc " All system-wide defaults are set in $VIMRUNTIME/debian.vim and sourced by & ...
- 题注Oracle数据库的网络连接原理
版权声明:本文博客原创文章,博客,未经同意,不得转载.
- 前台框架的选择 EasyUI、DWZ、ligerui
EasyUI1.3.1+MVC4.0+EF5.0 番外篇 关于前台框架的选择 EasyUI.DWZ.ligerui 昨天发了EasyUI1.3.1+MVC4.0+EF5.0实战之一 开篇及布局控件介绍 ...