数据库访问层的实现
- 格式:doc
- 大小:48.00 KB
- 文档页数:5
作者:heker2007 字体:[增加减小] 类型:转载时间:2016-04-27我要评论本文主要介绍创建数据访问层的具体步骤,从配置数据库连接到插入,更新和删除数据的具体实现方法,希望对大家有所帮助。
导言作为web开发人员,我们的生活围绕着数据操作。
我们建立数据库来存储数据,写编码来访问和修改数据,设计网页来采集和汇总数据。
本文是研究在 2.0中实现这些常见的数据访问模式之技术的长篇系列教程的第一篇。
我们将从创建一个软件框架开始,这个框架的组成部分包括一个使用强类型的DataSet的数据访问层(DAL),一个实施用户定义的业务规则的业务逻辑层(BLL),以及一个由共享页面布局的网页组成的表现层。
在打下这个后端的基础工作之后,我们将开始转向报表,示范如何显示,汇总,采集,和验证web 应用的数据。
这些教程旨在简明扼要,使用了许多屏幕截图,提供了按步就班(step-by-step)的指导,带你经历这个开发过程。
每个教程都有C# 版和VB版,并且附有涉及的完整的编码的下载。
(这第一个教程比较长,但以后其他的教程将以更容易消化的篇幅推出。
)在这些教程中,我们将使用置于App_Data 目录内的微软SQL Server 2005 Express版的Northwind数据库。
除了数据库文件外,App_Data目录还带有用于创建数据库的SQL 脚本,万一你想使用别的数据库版本的话。
如果你愿意的话,你也可以直接从微软下载这些脚本。
如果你使用别的SQL Server版本的Northwind数据库的话,你需要更新Web.co nfig文件中的NORTHWNDConnectionString设置。
本教程中的web应用是个基于文件系统的网站项目,是使用Visual Studio 2005 专业版建立起来的。
但是,所有的教程都可以在Visual Studio 2005的免费版本Visual Web Developer中运行。
访问数据库的五个步骤数据库是存储和管理数据的重要工具,它可以帮助我们高效地存储、检索和处理数据。
在进行数据库操作时,需要经过一系列步骤来实现对数据库的访问。
本文将介绍访问数据库的五个主要步骤,分别是连接数据库、发送查询请求、获取查询结果、处理结果数据和关闭数据库连接。
一、连接数据库在访问数据库之前,首先需要建立与数据库的连接。
连接数据库的过程包括指定数据库的位置和凭据,以及建立与数据库的通信通道。
通常,我们需要提供数据库的主机名或IP地址、端口号、用户名和密码等信息来完成连接。
在连接数据库时,可以使用数据库管理系统(DBMS)提供的连接接口或者编程语言中的数据库连接库来实现。
二、发送查询请求连接数据库成功后,就可以向数据库发送查询请求。
查询请求是指对数据库中的数据进行检索、修改、删除等操作的请求。
查询请求可以使用结构化查询语言(SQL)编写。
SQL是一种用于管理关系数据库的语言,它可以实现对数据库的增删改查等操作。
通过发送查询请求,可以告诉数据库我们需要进行什么样的操作。
三、获取查询结果数据库接收到查询请求后,会根据请求的内容进行相应的处理,并返回查询结果。
查询结果是数据库根据查询请求所得到的数据集合。
查询结果的形式可以是表格、记录集、JSON等。
获取查询结果的方式可以根据数据库连接库或者DBMS提供的接口进行操作,通常可以通过遍历结果集获取每一条记录的数据。
四、处理结果数据获取到查询结果后,需要对结果数据进行进一步处理。
处理结果数据的过程包括数据清洗、数据转换、数据分析等。
数据清洗是指对结果数据进行去重、去空、去噪声等处理,以保证数据的准确性和完整性。
数据转换是指将结果数据按照需要的格式进行转换,比如将数据转换为CSV、Excel等格式。
数据分析是指对结果数据进行统计、计算、分析等操作,以获得有价值的信息。
五、关闭数据库连接在完成对数据库的操作后,需要关闭与数据库的连接。
关闭数据库连接可以释放占用的资源,避免资源的浪费。
数据库连接与访问的说明书在本文中,我们将详细介绍数据库连接与访问的相关内容,包括数据库连接的概念、连接的建立方式以及访问数据库的步骤。
一、数据库连接的概念数据库连接是指应用程序与数据库之间的通信通道,通过该通道应用程序可以与数据库进行数据交互。
数据库连接的建立是应用程序访问数据库的重要前提。
二、数据库连接的建立方式1. 基于TCP/IP的连接方式基于TCP/IP的连接方式是最常见的数据库连接方式。
在此方式下,应用程序通过使用数据库驱动程序与数据库建立连接,并通过指定服务器地址、端口号以及登录凭证等信息实现访问数据库。
2. 基于HTTP协议的连接方式基于HTTP协议的连接方式通常用于Web应用程序访问数据库。
在此方式下,应用程序通过发送HTTP请求与数据库进行通信,并通过URL指定数据库服务器地址、端口号以及其他连接参数。
3. 其他连接方式除了上述两种常见的连接方式外,还有一些特殊情况下使用的连接方式。
例如,基于共享内存的连接方式适用于应用程序与数据库在同一物理机器上的情况。
三、访问数据库的步骤1. 加载数据库驱动程序在进行数据库连接之前,我们需要先加载相应的数据库驱动程序。
不同的数据库需要使用不同的驱动程序。
加载驱动程序的步骤通常包括导入驱动类、注册驱动等。
2. 建立数据库连接一旦加载了数据库驱动程序,我们就可以通过调用相应的连接方法建立与数据库的连接。
在建立连接时,需要提供数据库的连接信息,例如服务器地址、用户名、密码等。
3. 执行SQL语句连接建立成功后,我们可以通过执行SQL语句来对数据库进行操作。
SQL语句可以包括查询、插入、更新、删除等操作。
执行SQL语句的过程通常包括创建Statement对象、设置参数、执行语句等步骤。
4. 处理执行结果执行SQL语句后,我们需要对执行结果进行处理。
对于查询操作,我们可以通过ResultSet对象获取查询结果集,并进行相应的数据处理操作。
而对于其他操作,我们可以通过获取执行结果的返回值进行判断和处理。
数据库中访问数据的方式方法数据库中的访问数据的方式方法数据库,作为信息管理的重要工具,扮演着至关重要的角色。
它不仅用于存储和管理数据,还可以提供多种方式来访问数据。
在本文中,我们将探讨数据库中访问数据的方式和方法,以便更深入地理解这个主题。
1. SQL查询SQL(Structured Query Language)是一种专门用于数据库管理系统的语言。
通过使用SQL,用户可以轻松地从数据库中检索所需的数据。
在SQL中,有各种查询语句,包括SELECT、UPDATE、INSERT 和DELETE等,这些语句可以帮助用户实现对数据的增删改查操作。
在实际应用中,SQL查询主要通过SELECT语句来实现数据的检索和过滤。
用户可以根据特定的条件,从数据库中选择符合要求的数据,并将其返回到应用程序中进行进一步的处理。
2. 存储过程和触发器除了基本的SQL查询之外,数据库还提供了存储过程和触发器这两种高级的访问数据的方式。
存储过程是一组预先编译好的SQL语句的集合,可以被多次调用,从而提高了数据库的性能和安全性。
触发器则是一种特殊的存储过程,它会在数据库中的特定操作(如插入、更新、删除)发生时被自动触发执行,从而实现对数据的实时监控和处理。
3. ORM框架ORM(Object-Relational Mapping)是一种编程技术,它将数据库中的表结构映射到程序中的对象,从而实现对数据库的方便访问和操作。
通过使用ORM框架,开发人员可以不再需要直接编写SQL语句,而是可以直接通过操作对象来实现对数据库的增删改查操作,大大提高了开发效率和代码的可维护性。
4. Web服务和API随着互联网的发展,越来越多的应用程序需要通过网络访问数据库中的数据。
为了解决这个问题,开发人员可以通过编写Web服务和API 来实现对数据库的数据访问。
通过Web服务和API,应用程序可以通过HTTP协议向数据库中发送请求,并获取所需的数据,从而实现了跨平台和跨语言的数据访问。
数据库访问层的一种简单设计与实现1 引言在近期使用.NET开发项目时,发现这样一些问题,影响着程序的复用性和软件的灵活性:(1)数据库类型是变动的原因有两个:一是因为不同的客户,对同一个应用程序的性能要求或费用开销不同,要求使用的数据库类型不同;二是我们在开发程序时,在不同的使用环境下,需要使用不同类型的数据库。
比如,如果使用ACCESS数据库,那么在程序中会使用System.Data.OleDb命名空间下的类,如OleDbConnection,OleDbParameter,OleDbDataAdapter等等。
如果现在要求支持SQL Server数据库该怎么办呢?那么就需要修改现有的大量的代码,将System.Data.OleDb 下的类全部替换为System.Data.SqlClient命名空间下的类,即使是使用“查找/替换”进行批量的修改,也是非常繁琐,也很容易出错。
当然还会存在一些错误,比如,OleDb是使用“?”来传递参数的,而SQL Server中使用的是命名参数(如,“@para”)。
因此还需要修改大量的SQL语句,麻烦啊!(2)主键生成的规则不同不同应用环境下,可能使用不同的主键生成策略,有的需要使用数据库唯一键,有的使用表唯一键,有的需要加入时间或其他标记,有的只使用简单的计数器就可以,有的使用GUID…… 如果程序中写死了,下次环境变了,需要使用新的规则时,就又得改代码喽。
(3)数据库连接管理控制连接的数目,有时时单个连接,有时是若干个连接,有时使用连接池……(4)SQL语句安全性检查为了防止恶意攻击,需要对SQL进行检查。
有很多种检查方法,究竟使用哪个呢?(5)程序中SQL语句到处飞如果使用关系数据库,SQL语句是少不了的。
但是SQL语句在应用层出现太多,一旦数据库发生变化,那么上层需要修改的SQL语句就太多了,而且在编译时发现不了SQL语句的错误,在运行时才能找到。
另外大量的SQL语句,还严重影响了程序的美观。
在系列一中,我从整体上分析了PetShop的架构设计,并提及了分层的概念。
从本部分开始,我将依次对各层进行代码级的分析,以求获得更加细致而深入的理解。
在PetShop 4.0中,由于引入了 2.0的一些新特色,所以数据层的内容也更加的广泛和复杂,包括:数据库访问、Messaging、MemberShip、Profile 四部分。
在系列二中,我将介绍有关数据库访问的设计。
在PetShop中,系统需要处理的数据库对象分为两类:一是数据实体,对应数据库中相应的数据表。
它们没有行为,仅用于表现对象的数据。
这些实体类都被放到Model程序集中,例如数据表Order对应的实体类OrderInfo,其类图如下:这些对象并不具有持久化的功能,简单地说,它们是作为数据的载体,便于业务逻辑针对相应数据表进行读/写操作。
虽然这些类的属性分别映射了数据表的列,而每一个对象实例也恰恰对应于数据表的每一行,但这些实体类却并不具备对应的数据库访问能力。
由于数据访问层和业务逻辑层都将对这些数据实体进行操作,因此程序集Model 会被这两层的模块所引用。
第二类数据库对象则是数据的业务逻辑对象。
这里所指的业务逻辑,并非业务逻辑层意义上的领域(domain)业务逻辑(从这个意义上,我更倾向于将业务逻辑层称为“领域逻辑层”),一般意义上说,这些业务逻辑即为基本的数据库操作,包括Select,Insert,Update和Delete。
由于这些业务逻辑对象,仅具有行为而与数据无关,因此它们均被抽象为一个单独的接口模块IDAL,例如数据表Order对应的接口IOrder:将数据实体与相关的数据库操作分离出来,符合面向对象的精神。
首先,它体现了“职责分离”的原则。
将数据实体与其行为分开,使得两者之间依赖减弱,当数据行为发生改变时,并不影响Model模块中的数据实体对象,避免了因一个类职责过多、过大,从而导致该类的引用者发生“灾难性”的影响。
其次,它体现了“抽象”的精神,或者说是“面向接口编程”的最佳体现。
系统数据库操作采用ADO技术,在进行代码设计时,把数据库操作的代码单独写在一个自定义的ado.cpp文件里,包括CADODatabase和CADORecordset两个类分别实现对数据库和记录集的操作,并将这些操作封装在两个类中。
(1)引入ado库#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \no_namespace rename("EOF", "adoEOF"),rename("BOF","adoBOF")(2)用_ConnectionPtr对象连接数据库连接数据库操作中LPCTSTR lpstrConnection作为输入参数,在lpstrConnection参数中设置驱动driver={SQL Server},数据源(本地) Server=127.0.0.1,数据库名称DATABASE=QUEStoreDB,数据库用户名UID,数据库用户密码PWD。
运用_ConnectionPtr连接数据源。
主要代码如下:BOOL CADODatabase::Open(LPCTSTR lpstrConnection){HRESULT hr = S_OK;if(IsOpen())Close();if(strcmp(lpstrConnection, _T("")) != 0)m_strConnection = lpstrConnection;ASSERT(!m_strConnection.IsEmpty());try{hr = m_pConnection->Open(_bstr_t(m_strConnection), "", "", NULL);return hr == S_OK;}catch(_com_error &e){dump_com_error(e);}return FALSE;}(3)用_ConnectionPtr对象执行指令当对数据库进行插入、删除、更新操作时用此方法。
三层架构的实现方法三层架构是一种常用的软件架构模式,它将应用程序分为三个独立的层次:表示层、业务逻辑层和数据访问层。
这种架构模式的设计目标是实现系统的高内聚性和低耦合性,以便提高软件的可维护性、可扩展性和可重用性。
表示层是用户与系统交互的界面,负责接收用户的输入并将其转发给业务逻辑层进行处理。
表示层通常包括用户界面和展示逻辑,可以是Web页面、移动应用或桌面应用等。
在三层架构中,表示层应该尽可能简单,只负责接收和展示数据,不涉及具体的业务逻辑。
这样可以使表示层更易于修改和替换,而不会对其他层产生影响。
业务逻辑层是整个系统的核心,负责处理业务逻辑和业务规则。
它接收表示层传递过来的请求,并进行相应的处理,包括数据处理、业务计算、流程控制等。
业务逻辑层是三层架构中最重要的一层,它起到了连接表示层和数据访问层的桥梁作用。
在设计业务逻辑层时,应该将业务逻辑尽可能地抽象出来,以提高系统的可复用性和可测试性。
数据访问层是与数据库进行交互的层次。
它负责对数据的持久化和访问,通过封装数据库操作来隐藏数据库的细节。
数据访问层可以使用各种技术来实现,比如关系型数据库、非关系型数据库或者ORM框架等。
在三层架构中,数据访问层应该与具体的数据库实现解耦,以便在需要更换数据库时能够轻松地进行迁移。
三层架构的实现方法可以通过以下步骤进行:1. 首先,确定系统的需求,并进行需求分析。
根据需求分析的结果,确定系统的功能模块和业务流程。
2. 然后,将系统的功能模块划分为不同的层次。
一般情况下,可以将表示层、业务逻辑层和数据访问层作为三个独立的层次。
3. 接下来,设计表示层。
根据系统的需求和用户交互方式,设计用户界面和展示逻辑。
表示层应该尽量简单,只负责接收和展示数据。
4. 然后,设计业务逻辑层。
根据系统的需求和业务规则,设计业务逻辑和业务流程。
业务逻辑层应该尽量抽象,以提高系统的可复用性和可测试性。
5. 最后,设计数据访问层。
根据系统的需求和数据库设计,设计数据访问层的接口和实现。
河 北 水 利 电 力 学 院 学 报JournalofHebeiUniversityof WaterResourcesandElectricEngineering 2021年6月第31卷第2期Jun 2021Vol31 No2文章编号:2096 — 5680(2021)02 — 0072 — 05一种基于接口编程的高效通用数据访问层的设计与实现徐照兴(江西服装学院大数据学院,江西南昌向塘经济开发区丽湖中大道103号330201)摘要:在中大型系统的开发过程中,为了提高系统的可扩展性、可复用性及可维护性等,一般会采用多层架构,而在多层架构的设计中数据访问层设计尤为关键。
经过对多套开源框架分析研究,结合理论思考和实战开发经验,从充分利用代码和接口 可复用性、降低维护成本、提高软件可扩展性出发,分析阐述数据访问层是如何一步步进行优化的关键技术,形成一套通用的数据访问层技术,同时给出.Net 平台下用Entity Framework 技术实现的代码,从而可以加深加速软件技术开发人员更好地理 解数据访问层常用的技术思想,为同行提供一种数据访问层的实现技术参考。
经实践运行表明:在多层架构系统中使用该数据访问层技术的系统具有高解耦、高扩展、高可用及开发效率高等特点,具有广泛的应用前景。
关键词:数据访问层;Entity Framework ;可扩展性;接口 ;高效;延迟加载中图分类号:TP311. 1文献标识码:ADOI : 10. 16046/j. cnki. issn2096-5680. 2021. 02. 013决定一个系统优劣最关键的是系统的架构,系统架构的优劣决定着系统具有的延迟与吞吐量、可 用性与一致性、可扩展性、稳定性等[1]。
系统经典架构主要有基于接口编程的三层架构,该架构可以很 好地从整体上对系统解耦。
经典三层通常分为数据访问层、业务逻辑层、表现层,大型系统通常会在经典三层架构的基础上对业务逻辑层进行再封装,使 之形成新的一层,通常称为服务层,这样系统的架构就变成了四层,也就成为分布式系统架构[]。
java下访问数据库的流程和方法在Java中,访问数据库是一项常见的任务。
通过使用Java提供的一组API (应用程序接口),可以轻松地与数据库进行交互,包括连接到数据库、执行查询和更新操作以及关闭连接。
下面是访问数据库的一般流程和常用方法:1. 加载数据库驱动程序:要访问特定类型的数据库,首先需要加载该数据库的驱动程序。
例如,如果要访问MySQL数据库,需要加载MySQL数据库的驱动程序。
这可以通过使用Class.forName()方法来实现。
2. 建立数据库连接:一旦加载了合适的驱动程序,就可以通过使用DriverManager类的getConnection()方法来建立与数据库的连接。
在建立连接时,需要提供数据库的URL、用户名和密码。
3. 创建和执行SQL语句:一旦与数据库建立了连接,就可以创建并执行SQL语句。
常见的SQL语句包括查询、插入、更新和删除操作。
可以使用Statement或PreparedStatement接口来执行SQL查询或更新操作。
PreparedStatement还允许使用占位符,以防止SQL注入攻击。
4. 处理查询结果:如果执行的是查询操作,则需要处理查询结果。
可以使用ResultSet类来获取查询结果集的数据。
通过遍历结果集,并使用ResultSet提供的方法来获取每一行的数据。
5. 关闭连接:当完成与数据库的交互后,应该关闭数据库连接。
这可以通过调用Connection 对象的close()方法来实现。
需要注意的是,在访问数据库时,需捕获并处理可能发生的异常,以确保程序的稳定性。
可以使用try-catch块来捕获异常,并在出现异常时执行适当的错误处理操作。
总结而言,访问数据库的流程包括加载数据库驱动程序、建立数据库连接、创建和执行SQL语句、处理查询结果以及关闭连接。
通过熟悉并正确使用Java提供的数据库访问API,可以轻松地与数据库进行交互,从而满足各种数据操作需求。
数据库中的数据访问层设计与优化随着互联网的迅猛发展,数据的重要性愈发凸显。
作为存储和管理数据的重要工具,数据库在各个领域扮演着关键角色。
而作为数据库应用开发过程中的关键组成部分,数据访问层承担着连接数据库和应用程序的桥梁作用。
本文将探讨数据库中的数据访问层设计与优化的方法和策略。
一、数据访问层的设计原则数据访问层(Data Access Layer)是应用程序与数据库之间交互的一个重要层次。
设计合理的数据访问层可以提高应用程序的性能、可维护性和可扩展性。
在进行数据访问层设计时,需要考虑以下原则:1. 分离关注点:数据访问层应该与业务逻辑层和表示层相互独立,遵循单一职责原则。
这样可以使代码更加清晰,易于理解和维护。
2. 封装复杂性:数据访问层应该封装实现细节,使应用程序修改底层数据库实现时,只需对数据访问层进行适应性修改而不影响其他层次的代码。
3. 最小化数据转换:数据访问层应该尽可能将数据库中的数据对象映射为应用程序使用的对象模型,以减少数据格式转换的开销。
4. 良好的异常处理:数据访问层应该能够捕获和处理异常,提供有意义的错误信息,便于其他层次进行错误处理和容错操作。
5. 合理的查询优化:数据访问层应该合理设计SQL查询,避免不必要的表连接和查询耗时操作,提高查询性能。
二、数据访问层的设计模式在数据库应用开发中,常用的数据访问层设计模式有以下几种:1. 数据访问对象模式(Data Access Object, DAO):该模式将数据访问操作封装在一个独立的对象中,负责与数据库进行交互,提供插入、删除、更新和查询等操作方法。
DAO模式充分实现了数据访问的分离,使得开发人员可以专注于业务逻辑的实现。
2. 仓储模式(Repository Pattern):该模式将业务实体与数据存储之间建立联系,并提供了一系列查询和操作方法。
仓储模式使应用程序对数据源的访问更加规范化和抽象化,减少了与特定数据库技术的依赖。
如何设计与优化数据库的数据访问层引言:数据库是现代信息系统中不可或缺的组成部分,其中数据访问层的设计和优化对系统的性能和可扩展性起着重要作用。
本文将以如何设计和优化数据库的数据访问层为主题,探讨相关的技术和方法。
一、理解数据访问层的作用数据访问层是位于应用程序和数据库之间的抽象层,负责协调应用程序与数据库的交互。
它使得应用程序能够方便地操作和管理数据库,同时能够对数据库的访问进行优化。
为了设计出高效的数据访问层,我们需要从以下几个方面进行考虑。
二、优化数据库查询1. 使用索引:索引是提高数据库查询性能的关键。
在设计数据库时,根据查询需求创建适当的索引,可以大大减少查询数据的磁盘读取量。
2. 避免全表扫描:全表扫描会导致数据库性能下降,应该尽量避免。
通过合理的索引和优化查询语句,可以避免全表扫描,提高查询效率。
3. 分段加载数据:对于大量数据的查询,可以考虑分段加载数据,避免一次性加载所有数据,造成数据库负载过高。
4. 缓存查询结果:通过将查询结果缓存在内存中,可以减少数据库的访问次数,提高查询效率。
但是需要注意及时更新缓存,保证数据的一致性。
三、合理设计数据库模式1. 规范命名规则:良好的命名规则可以提高数据库的可读性和可维护性。
命名应该具有一致性,并能够准确反映实际业务含义。
2. 规范数据类型选择:在设计数据库时,根据实际需求选择合适的数据类型,避免数据类型过大或过小,从而浪费存储空间或影响查询效率。
3. 正规化数据库模式:正规化是数据库设计的基本原则之一。
通过将数据拆分为更小的关系表,可以避免数据冗余,减少存储空间,并提高查询性能。
4. 考虑数据增长:在设计数据库时,需要考虑到数据的增长趋势,合理选择存储引擎和分区机制,以便能够满足未来的数据增长需求。
四、使用高效的数据访问技术1. 合理选择ORM框架:ORM(对象关系映射)框架可以简化数据访问层的开发,提高代码的复用性。
在选择ORM框架时,需要考虑框架的性能、功能和易用性等因素。
系统数据库操作采用ADO技术,在进行代码设计时,把数据库操作的代码单独写在一个自定义的ado.cpp文件里,包括CADODatabase和CADORecordset两个类分别实现对数据库和记录集的操作,并将这些操作封装在两个类中。
(1)引入ado库
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \
no_namespace rename("EOF", "adoEOF"),rename("BOF","adoBOF")
(2)用_ConnectionPtr对象连接数据库
连接数据库操作中LPCTSTR lpstrConnection作为输入参数,在lpstrConnection参数中设置驱动driver={SQL Server},数据源(本地) Server=127.0.0.1,数据库名称DATABASE=QUEStoreDB,数据库用户名UID,数据库用户密码PWD。
运用_ConnectionPtr连接数据源。
主要代码如下:
BOOL CADODatabase::Open(LPCTSTR lpstrConnection)
{
HRESULT hr = S_OK;
if(IsOpen())
Close();
if(strcmp(lpstrConnection, _T("")) != 0)
m_strConnection = lpstrConnection;
ASSERT(!m_strConnection.IsEmpty());
try
{
hr = m_pConnection->Open(_bstr_t(m_strConnection), "", "", NULL);
return hr == S_OK;
}
catch(_com_error &e)
{
dump_com_error(e);
}
return FALSE;
}
(3)用_ConnectionPtr对象执行指令
当对数据库进行插入、删除、更新操作时用此方法。
String sql为输入参数,传入SQL(Insert,Delete,Update)语句。
主要代码如下:
BOOL CADODatabase::Execute(LPCTSTR lpstrExec)
{
ASSERT(m_pConnection != NULL);
ASSERT(strcmp(lpstrExec, _T("")) != 0);
try
{
m_pConnection->Execute(_bstr_t(lpstrExec), NULL, adExecuteNoRecords);
}
catch(_com_error &e)
{
dump_com_error(e);
}
return TRUE;
}
(4)使用_RecordsetPtr对象返回记录集
使用数据记录集指针_RecordsetPtr来实现ADO数据操作。
lpstrExec为输入参数,传入SQL(Select)语句;通过_RecordsetPtr对象的操作提取记录集。
主要代码如下:
BOOL CADORecordset::Open(_ConnectionPtr mpdb, LPCTSTR lpstrExec, int nOption)
{
if (IsOpen()) Close();
if(strcmp(lpstrExec, _T("")) != 0)
m_strQuery = lpstrExec;
ASSERT(!m_strQuery.IsEmpty());
m_strQuery.TrimLeft();
BOOL bIsSelect = m_strQuery.Mid(0, strlen("Select ")).CompareNoCase("select ") == 0;
try
{
m_pRecordset->CursorLocation = adUseClient;
if(bIsSelect || nOption == openQuery)
m_pRecordset->Open((LPCSTR)m_strQuery,
_variant_t((IDispatch*)mpdb, TRUE),
adOpenStatic, adLockOptimistic, adCmdText);
else if(nOption == openTable)
m_pRecordset->Open((LPCSTR)m_strQuery,
_variant_t((IDispatch*)mpdb, TRUE),
adOpenDynamic, adLockOptimistic, adCmdTable);
else if(nOption == openStoredProc)
{
m_pRecordset->Open((LPCSTR)m_strQuery,
_variant_t((IDispatch*)mpdb, TRUE),
adOpenStatic, adLockOptimistic, adCmdStoredProc);
}
else
{
TRACE( "Unknown parameter. %d", nOption);
return FALSE;
}
}
catch(_com_error &e)
{
dump_com_error(e);
return FALSE;
}
return m_pRecordset != NULL;
}
(5)使用_RecordsetPtr对象逐个取出数据
当对数据库进行读取某一数据操作时选用此方法,区别于控件的大段数据源绑定。
LPCTSTR lpFieldName为输入参数,传入字段名;CString& strValue为输出参数,传出字段内容。
主要代码如下:
BOOL CADORecordset::GetFieldValue(LPCTSTR lpFieldName, CString& strValue)
{
CString str = _T("");
_variant_t vtFld;
try
{
vtFld = m_pRecordset->Fields->GetItem(lpFieldName)->Value;
switch(vtFld.vt)
{
case VT_BSTR:
str = vtFld.bstrVal;
break;
case VT_I4:
str = IntToStr(vtFld.iVal);
break;
case VT_DATE:
{
COleDateTime dt(vtFld);
str = dt.Format("%Y-%m-%d %H:%M:%S");
}
break;
case VT_EMPTY:
case VT_NULL:
break;
default:
strValue.Empty();
return FALSE;
}
strValue = str;
return TRUE;
}
catch(_com_error &e)
{
dump_com_error(e);
strValue= _T("");
return FALSE;
}
}
(6)关闭数据库
在所有数据操作结束后,关闭数据库。
void CADODatabase::Close()
{
try
{ if (IsOpen())
m_pConnection->Close();
}
catch (_com_error e)
{
dump_com_error(e);
}
}。