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就是和数据库打 ...
 
随机推荐
- XFtp中文乱码解决
			
异常处理汇总-开发工具 http://www.cnblogs.com/dunitian/p/4522988.html 一张图解决 异常处理汇总:http://www.cnblogs.com/duni ...
 - asp.net mvc上传头像加剪裁功能
			
原文:asp.net mvc上传头像加剪裁功能 正好项目用到上传+剪裁功能,发上来便于以后使用. 我不能告诉你们其实是从博客园扒的前台代码,哈哈. 前端是jquery+fineuploader+jqu ...
 - IntelliJ IDEA —— Android开发的另一个选择
			
IntelliJ IDEA —— Android开发的另一个选择 很早就听过Eclipse的大名,但在我初学Java的时候,一位前辈推荐的IDE却是IntelliJ IDEA.因为之前用过JetBra ...
 - asp.net读取CSV
			
原文:asp.net读取CSV 用Excel导了两天数据,各种问题,折磨客户也折磨了自己,以前没发现的问题一下子都暴露出来了 特意收集两篇Excel跟CSV读取相关的两篇文章 asp.net读取exc ...
 - 【淡墨Unity3D Shader计划】五 圣诞用品: Unity在Shader三种形式的控制&混合操作编译
			
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/42060963 作者:毛星云(浅墨) ...
 - 调试javascript
			
Chrome 控制台 如何调试javascript 上面的文章已经大致介绍了一下console对象具体有哪些方面以及基本的应用,下面简单介绍一下如何利用好chrome控制台这个神器好好调试javasc ...
 - 四种方案:将OpenStack私有云部署到Hadoop MapReduce环境中
			
摘要:OpenStack与Hadoop被誉为继Linux之后最有可能获得巨大成功的开源项目.这二者如何结合成为更猛的新方案?业内给出两种答案:Hadoop跑在OpenStack上或OpenStack部 ...
 - Asterisk 未来之路3.0_0005
			
原文:Asterisk 未来之路3.0_0005 第二章: Asterisk的架构 Asterisk 和其他众多传统的PBX是有区别的,拨号方案针对各种通道处理本质上采用同一种方式. 在传统的PB ...
 - Visual Studio 2015 & C#6.0
			
Visual Studio 2015 & C#6.0 试用报告,持续更新. 昨天早上看到了.net开源的消息,我是非常兴奋的,毕竟局限于Windows的.NET经常被人唾弃.VB暂且不 ...
 - 使用UDL文件来测试SQL Server数据库连接
			
原文 来自http://www.2cto.com/database/201308/234427.html 使用UDL测试SQL Server连接问题 做数据库经常会遇到SQL Server连接的问 ...