MFC 数据库编程 增删改查的一个例子
来源:互联网 发布:北欧风 知乎 编辑:程序博客网 时间:2024/05/16 04:40
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_CategoryGOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Article]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)drop table [dbo].[Article]GOif exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Category]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)drop table [dbo].[Category]GOCREATE 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]GOCREATE 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 数据库编程 增删改查的一个例子
- MFC 数据库编程 增删改查的一个例子
- 一个使用ibatis对数据库增删改查的例子
- ibatis增删查改的一个例子
- 数据库增删改查例子
- web端一个增删改查例子
- 数据库的增删改查
- 数据库的增删改查
- 数据库的增删改查
- 数据库的增删改查
- 数据库的增删改查
- 数据库的增删改查
- 数据库的增删改查
- 数据库的增删改查
- 数据库的增删改查
- 数据库的增删查改
- 数据库的增删查改
- 数据库的增删改查
- Google Cloud Print
- HYSBZ-1878-HH的项链
- 去除可执行文件中没用到的符号或函数
- Android setImageResource与setImageBitmap的区别
- Linux华丽入门上场
- MFC 数据库编程 增删改查的一个例子
- 分享40个超棒的CSS3按钮教程
- 圆的直线分割
- mysql 常用操作(整理)
- servlet,filter,listener
- cocos2d-x之新浪微博平台接入接口
- 报表加载大数据时显示进度条
- Jxl的API结构
- VCL中DoubleBuffered属性以及TWinControl的WMPaint的研究