实战案例:使用ado和三层架构完成登录实例

上传人:第*** 文档编号:34041828 上传时间:2018-02-20 格式:DOC 页数:19 大小:293KB
返回 下载 相关 举报
实战案例:使用ado和三层架构完成登录实例_第1页
第1页 / 共19页
实战案例:使用ado和三层架构完成登录实例_第2页
第2页 / 共19页
实战案例:使用ado和三层架构完成登录实例_第3页
第3页 / 共19页
实战案例:使用ado和三层架构完成登录实例_第4页
第4页 / 共19页
实战案例:使用ado和三层架构完成登录实例_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《实战案例:使用ado和三层架构完成登录实例》由会员分享,可在线阅读,更多相关《实战案例:使用ado和三层架构完成登录实例(19页珍藏版)》请在金锄头文库上搜索。

1、实战案例:使用 ADO 技术和三层架构实现用户登录案例【案例描述】现在我们将会通过一个简单的登录案例体会三层架构的开发。登录是大部分的软件都会拥有的重要功能之一,虽然它不是在软件设计的功能用例之内,但它却是软件不可缺少的一部分,通过登录功能我们可以有效的阻止非授权的用户访问软件中保存的信息。首先用户通过软件的提示输入用户名和密码,接下来软件将会通过 ADO在数据库中使用 select 语句查询对应的信息,检测数据表中是否有满足用户输入的用户名和密码,并将检测出来的结果返回到记录集中,软件通过读取记录集中保存的信息,检测用户是否可以登录,如果可以登录则显示“允许登录”的提示,否则显示“不允许登录

2、”的提示。运行效果如下:【三层架构的描述】清楚了上面的需求之后我们可以使用三层架构来描述一下这个简单的功能。首先我们从表示层出发。表示层负责提示用户输入用户名和密码,并且接收用户输入的用户名和密码。接下来通过调用事务层的函数 Login,通过 Login 的形参将用户名和密码传递到事务层进行处理。接下来事务层将传递的用户名和密码整理到 SQL 语句中,并调用数据库访问层的函数 ExcuteSelect 函数将这条 SQL 语句传递到数据库访问层。数据库访问层通过 ADO 技术和数据库建立连接并且执行该 SQL 语句,将数据库执行出的结果通过 RecordSet 对象保存起来并且返回 Recor

3、dSet 对象的指针,通过该指针将 RecordSet 对象传递到事务层。接下来事务层通过对该 RecordSet 对象进行“拆包”获取记录集中保存的结果,并判断该结果是否可以满足允许用户登录的条件,如果允许则返回true,否则返回 false。表示层中通过事务层的 Login 函数的返回值判断用户是否可以登录,如果可以则提示“允许登录” ,否则提示“不允许登录” 。在 Visual Studio 中生成的关系依赖图如下:(具体可见工程中的体系结构图)【数据结构的设计】该案例是一个非常简单的使用用户名和密码设计的案例,因此我们可以设计一个用于保存某个用户的用户名和密码的数据结构,在 C+中,用

4、户自定义的数据结构有很多种描述方案,我们此处选择面向对象的描述方法,使用类进行描述,例如 User 类,其类图如下:【数据库设计】接下来我们可以进行该项目的数据库设计了。该数据库我们可以命名为Test,而数据库中只有一张数据表 Login_Inf。这张数据表中仅仅记录了可以登录软件的用户名和密码。为了防止用户名有重复,我们规定用户名作为主键(作为主键的列不能为空,且值要唯一) 。同时为了防止非授权的用户登录软件(例如盗用密码或者清除密码) ,我们规定每个用户的密码文件不能够为空。表格效果如下图:建立数据库和数据表的代码如下:create database Test -创建名称为 Test 的数

5、据库gouse Test -使用该数据库gocreate table Login_inf -创建登录信息表(UserName varchar(20) primary key, -创建用户名列,为主键PasswordKey varchar(20) not null, -创建密码列,要求该列单元格添加数据不能为空值)goinsert into Login_inf values(jianghanxin,jiang_1994221) -添加一个元组运行之后在 SQL Server Management Studio 的“对象资源管理器”中可以查看到我们所建立的数据库 Test 和数据表 Login_i

6、nf。如下图:【第一步:从数据库访问层开始】接下来我们设计完成数据库之后我们可以开始对 C+代码的设计。首先我们从最基本的也是最底层的数据库访问层开始。由于我们所有的操作都是要通过数据库访问层执行 SQL 语句完成的,因此数据库访问层我们可以这样描述。数据库访问层用于和数据库打交道,用于将应用程序和 SQL Server 数据库建立连接,并且执行相应的数据操作。如果有类似于查询的返回结果,则返回带有查询结果的记录集。在完成数据库操作之后我们可以关闭数据库连接。小提示:每次执行数据库操作都必须要先打开数据库连接,完成操作之后,再将数据库连接关闭。否则程序将会报错。在了解了上述的功能描述后我们可以

7、建立一个类描述数据库访问层,例如DataBase。声明的代码如下:#pragma once#ifndef DATABASE_H#define DATABASE_H#include #include #include #include #import C:Program FilesCommon FilesSystemadomsado15.dllno_namespace rename(EOF,adoEOF)using namespace std;class DataBasepublic:DataBase(_bstr_t DataBaseName);DataBase(void);int Excute

8、(_bstr_t const /执行非查询的数据库命令_RecordsetPtr /执行查询的数据库命令void Open();/打开数据库连接void Close();/关闭数据库连接private:_ConnectionPtr MyConnection;/数据库连接指针_RecordsetPtr Records;/数据库记录集指针_bstr_t ConnectionString;/连接字符串;#endifDataBase 函数:DataBase 函数是该类的构造函数,通常构造函数负责一些初始化的工作。为了能够减少后期我们工作的麻烦,例如每次调用 DataBase 类都需要获取数据库字符串。

9、为了大家能够更好的理解数据库的连接字符串,我们在这里不妨对数据库的连接字符串进行一些分析。有如下的连接字符串:Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Test;Data Source=(local)其中 Provider 参数说明连接数据库所使用的驱动引擎,由于我们使用的是ADO 技术,故此我们使用的 SQLOLEDB.1 驱动。我们可以通过打开.udl 文件,并且点击“提供程序”选项卡进行选择。如下图:此处我们可以看到所选择的是“Micorosoft OL

10、E DB Provider for SQL Server”,其含义相信大家都能够明白吧!当然,此处我需要再次解释一下 ADO其实是对 OLE DB 访问技术的又一次封装,使得我们访问数据库变得更加的简单,因此说到底 ADO 技术的本质其实还是 OLE DB。因此我们在选择提供程序时应该选择 Micorosoft OLE DB Provider,由于我们使用的数据库为 SQL Server,因此我们需要选择的是 for SQL Server。接下来我们需要知道的是“Initial Catalog”参数,该参数用于描述应用程序究竟应该访问哪一个数据库,其后的等于号跟的是应用程序需要访问的数据库的名

11、称,即 Test。另外我们还需要了解“Data Scource”参数,该参数用于描述数据源,即数据库服务器的地址,由于我们的电脑上已经安装了 SQL Server 2008,此时我们的电脑也可以作为一个单独的数据库服务器,名称为(local)或者 localhost。上述的两个参数我们可以打开 udl 文件在“连接” 选项卡中查看。如下图:为了我们每次编程的时候不需要去通过 udl 文件获取连接字符串,我们可以通过字符串的连接将连接字符串进行相应的处理。由于我们此时需要操作的信息基本固定,除了每次所访问的数据库不同,因此我们只需要修改“Initial Catalog”参数后的值就可以了。代码如

12、下:this-ConnectionString = Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=;this-ConnectionString += DataBaseName;/将该变量的参数与 Initial Catalog 连接this-ConnectionString += ;Data Source=(local);接下来我们还需要在构造函数中完成一件很重要的事情初始化 COM环境。由于 ADO 也是 COM 组件,因此我们使用 ADO

13、 之前都需要初始化COM 组件,为了能够完成自动初始化环境,我们可以将初始化的代码放置到构造函数中(构造函数在创建对象时自动执行) 。初始化 COM 组件的代码如下:/初始化 COM 编程环境if(FAILED(:CoInitialize(NULL)coutMyConnection = NULL;/设置连接指针为空,防止野指针this-Records = NULL;/设置记录集指针为空,防止野指针/设定连接字符串,需要连接的数据库通过构造函数的形参指定this-ConnectionString = Provider=SQLOLEDB.1;Integrated Security=SSPI;thi

14、s-ConnectionString += Persist Security Info=False;User ID=sa;Initial Catalog=;this-ConnectionString += DataBaseName;this-ConnectionString += ;Data Source=(local);/初始化 COM 编程环境if(FAILED(:CoInitialize(NULL)coutConnectionString = this-ConnectionString;/指定连接字符串MyConnection-ConnectionTimeout = 10;/指定连接超时

15、为 10sdoMyConnection-Open(,adConnectUnspecified);/打开连接while(MyConnection-State != adStateOpen);catch(_com_error e)其中 trycatch(_com_error e)用于检测该代码是否会产生异常情况使得程序崩溃。这一步是很有必要的。当然我们在此设定只要连接状态处于关闭状态,就不断地向数据库使用 MyConnection-Open 函数不断的对数据库进行连接,直到连接上数据库为止。Close 函数:Close 函数负责关闭数据库连接,为了能够提高数据库访问层的效率,我们可以先判断 MyC

16、onnection 中的 State 属性,如果处于打开状态(adStateOpen )则调用 Close 函数,关闭数据库连接。代码如下:void DataBase:Close()tryif(MyConnection-State = adStateOpen)/如果连接处于打开状态MyConnection-Close();/关闭数据库连接catch(_com_error e)Excute 函数:对数据库的操作通常分为查询操作和非查询操作,非查询操作包括INSERT(插入) 、UPDATE(更新) 、DELETE (删除) ,Excute 函数用于执行非查询操作的 SQL 语句,由于 SQL 语句的变数还是很多的,因此我们可以将SQL 语句作为 Excute 函数的形参。为了能够检测 S

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号