在MFC项目中使用ADO.NET
来源:互联网 发布:c4d软件下载mac版 编辑:程序博客网 时间:2024/05/16 01:18
文章出处:http://www.codeproject.com/KB/database/adonetinmfc.aspx
文章说明:本文是在原文基础上翻译并加以详细阐述写出来的,这是本人第一次翻译英文的文章,由于能力有限,不免会有许多瑕疵,还望各位大虾不吝指教。
代码下载:在原文的页面上有下载链接
前言
写这篇文章的主要目的是为了说明怎么样很容易的把.net的库与MFC库混合使用,在非托管代码中使用.net库,比如在MFC项目中使用ADO.NET。所以就写了一个MFC的DEMO,并且使用了ADO.NET这个既安全又强大的类库。因为最近公司的一个项目是在MFC框架下开发的,但又需要对数据进行读取,并且得将这些数据跟我们已经封装好的带数据绑定功能的树控件、列表控件进行类似于WPF控件那样的数据绑定,如果再定义一些例如DataSet的类又太麻烦,所以就来尝试下在MFC中使用ADO.NET。
ADO.NET
为了迎合当今开发者在技术上的需求,微软意识到了需要有一个新的建立在.Net FrameWork之上的数据连接编程模式。要想建立在.Net FrameWork之上,就必须确保数据连接技术通用、组建共享一个通用类型系统(CTS)、设计模式和命名规定。ADO.NET的设计就符合这些新的编程模式的需求如:非连接数据结构、彻底的集成XML、多种数据源的数据呈现、最佳的设备与数据库相互制约,所有的这些都完全符合.Net FrameWork。
托管和非托管代码的混合使用
为了在MFC的框架下使用托管代码,我们必须更改MFC工程的一些设置,然后增加对.net库的声明。
更改MFC工程设置
在你的项目属性设置对话框中更改下面几项。
常规 - 启用托管增量生成 = 是
C/C++ - 常规 - 调试信息格式 = 程序数据库(/Zi)
C/C++ - 代码生成 - 启用最小重新生成 = 否
C/C++ - 代码生成 - 基本运行时检查 = 默认值
在配置好这些以后编译器就会生成类库函数的托管版本和非托管版本。
在工程中添加引用
现在就可以在你任何想使用托管代码的地方加入以下代码了。如果要在很多地方使用托管代码建议你把这些代码加入到stdafx.h文件中。
#pragma managed
#using <mscorlib.dll>
#using <System.dll>
#using <system.data.dll>
#using namespace System;
#using namespace System::Data;
#using namespace System::Data::OleDb;
托管编译指示器会打开函数级别控制(function-level control)去编译所有函数生成托管代码。非托管函数会编译为内部平台,程序这一部分的执行将由公共语言运行时传输到内部平台。因为我们在MFC工程中使用ADO.NET,所以必须包含System::Data,然后我们想使用微软的数据库连接,还得再包含System::Data::OleDb。
在托管类中使用__gc指针
为了在类中添加一个托管代码的指针成员,我们必须使用__gc指针。当然了在类中添加一个非托管的类型对象为__gc指针是非法的。为了使指向托管类型的对象在堆上开辟空间,头文件vcclr.h提供安全类型(type-safe)包装的模板gcroot。使用这个模板我们就可以将一个有效的__gc指针添加到非托管的类中了,就会认为这个指针就是一个普通指针类型。系统已经默认在你的项目中包含了vcclr.h头文件,在Microsoft Visual Studio 9.0/VC/include下会找到该文件。
下面是声明托管类型对象的方式:
gcroot<OleDbConnection*> m_OleDbConnection;
gcroot<OleDbCommand*> m_OleDb;
gcroot<OleDbDataReader*> m_Reader;
编写托管代码示例
#pragma push_macro("new") ,#undef new 和 #pragma pop_macro("new")是在DEBUG模式下使用的。否则编译会显示错误:配置参数不允许产生托管类型的实例。
注:使用VC助手的朋友要注意啦。可能是使用的是.net的内容,所以涉及到托管代码的地方没有语法高亮,我想肯定有办法能解决,在这里我就不做研究了,希望知道解决办法的大虾们能留言告诉我。在我的博客里我以后也会写一些ADO.NET在MFC中更详细的使用方法。
参考文章:http://msdn.microsoft.com/zh-tw/library/dd229218.aspx 关于通用类型系统的
2010-12-312010-12-31
- 在MFC项目中使用ADO.NET
- 在ado.net中使用ado recordset
- 学习笔记》ADO.NET》在ADO.NET中使用DataSet
- 如何在ado.net中使用sqlite
- 在 ADO.NET中使用存储过程
- vc2005 mfc 使用ado.net
- VS2015在MFC中使用ADO方法连接Access2013数据库
- VS2013在MFC中使用ADO方法操作Access2013数据库
- 在.NET中利用SQLite ADO.NET使用SQLite数据库
- ado.net EF与ado.net区别比较、在EF中使用执行sql语句
- ado.net EF与ado.net区别比较、在EF中使用执行sql语句
- 在win32项目中使用mfc类
- 在非MFC项目中使用CString
- 在 Microsoft Office 中使用 ADO.NET 数据集
- 再次介绍如何在 .NET 应用程序中使用 ADO
- 在VC++.NET中使用ADO访问数据库
- 在C#和ado.net中使用事务
- 在VC++.NET中使用ADO访问数据库
- asterisk和sip终端都在NAT后面 问题解决方案
- ORA-27101: shared memory realm does not exist 错误的处理
- shei you m,o shou di tu de xiu gai qi
- Tomcat6.x性能参数调整
- 我的WCF之旅(13):创建基于MSMQ的Responsive Service
- 在MFC项目中使用ADO.NET
- nginx_mod_h264_streaming-2.2.7模块遇到不完整MP4文件导致nginx进程死掉( truncated mp4 make nginx crash)
- SIP穿越NAT&FireWall解决方案
- Linux查看磁盘分区等命令和相关工具介绍
- oracle字符详解
- 用…表示多余的字符
- WebLogic配置
- 开发环境搭建1:Red_Hat_linux的安装时的注意事项
- Ubuntu 10.10 安装配置LAMP(转)