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



VS2010 MFC一个非常强大的编程工具,它内置了许多数据操作的功能,包括数据库增删改查功能。开发人员可以利用这些功能快速地开发出各种类型的数据库应用程序。 在VS2010 MFC中,数据库增删改查操作主要是通过ADO(ActiveX Data Objects)技术来实现的。ADO是一种Microsoft开发的技术,它提供了一种标准的数据访问接口,使得不同的应用程序可以统一地访问不同类型的数据库,包括SQL Server、Oracle、Access等。 在使用VS2010 MFC进行数据操作时,需要首先连接到数据库,然后才能进行增删改查等操作。连接数据库的方法包括使用ODBC(Open Database Connectivity)数据源或者使用DSN(Data Source Name)标识符。连接成功后,就可以通过MFC提供的各种API来进行数据操作。例如,可以使用CRecordset类来进行增删改查等操作,也可以使用CDatabase、CCommand、CParameter等类来进行数据库连接和数据操作。 具体来说,数据库增删改查操作分别对应着以下MFC类/方法: 1. 增加数据:使用CRecordset类的AddNew()方法和Update()方法来添加新的记录到数据库中。 2. 删除数据:使用CRecordset类的Delete()方法来删除数据库中的记录,也可以使用SQL语句中的DELETE语句来实现。 3. 修改数据:使用CRecordset类的Edit()方法和Update()方法来更新数据库中的记录,也可以使用SQL语句中的UPDATE语句来实现。 4. 查询数据:使用CRecordset类的Open()方法来查询数据库中的记录,也可以使用SQL语句中的SELECT语句来实现。 总体来说,VS2010 MFC提供了非常强大而且易于使用的数据库操作功能,通过它可以快速地开发出各种精密的数据库应用程序,为用户提供更加高效和便利的数据管理和处理服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瓦力冫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值