资源描述
-考试成绩任课教师科技大学研究生考试试卷考试科目智能信息处理与数据挖掘专业计算机应用技术* 1606035 考生丰考生类别学术硕士考前须知1. 试题随试卷交回;2. 试卷评阅后,一周送交研究生秘书处保存;3. 考生类别为学术硕士、专业学位硕士、在职人员攻读硕士学位。摘要随着计算机的普及应用和升级开展,数据挖掘作为一个新兴的、多学科穿插的应用领域,正在各行各业的以信息分析为根底的决策支持系统活动中扮演着越来越重要的角色。数据仓库挖掘作为数据挖掘的一个重要研究分支,其主要目的是用于发现数据集中项之间的相关联系,即关联规则。数据挖掘是从大型数据库中提取知识信息的主要手段,由于形式简单、易于理解,因此,数据仓库挖掘已广泛应用各个领域,用来检验行业长期形成的知识模式,或发现隐藏的新规律。随着我国教育改革的不断深入,高等教育得到了长足的开展。当前,在各类学校中,学校的数据库建立已较完善,数据库中存储着大量的教育教学信息。据调查,这些隐藏着大量教育信息的历史数据没有被很好地利用,没有好好挖掘隐藏在这些数据中的教育规律。致使在一些学校专业区分性不大,专业课设置没有明显的区分。毕业的学生却很难找到适合本专业的工作。究其原因,除了课程设置不能跟上,学生的实际能力不能被培养到实际用人单位所要求的标准等原因外,还存在着很多隐藏在背后的因。最终造成了学生在承受完四、五年教育后,良好素质没有被开发,能力不够。而具有实际工作能力的学生被专业或*些未被发现的因素所限制,本文研究从大量的学校教育信息中挖掘出正确的、可靠的、可信的关联规则。本文利用数据仓库技术、OLAP 技术、数据挖掘技术分析学校毕业生就业数据。通过对已毕业学生的专业、生源地、成绩及就业时间等信息进展联机分析与数据挖掘,从不同角度、不同层次寻找出学生就业与否的在原因,发现学生对学校专业设置的需求,从而到达为专业设置和教育教学提供决策支持。AbstractAs puter being wildly used and upgraded, the data mining growing into a new rising and multi-disciplinary application field are playing a more and more important role in the information analysis of decision support system. Association mining is an important research branch of the data mining, and it aims at discovering the relationship among items in a data set. The data mining is the main measure of deriving knowledge from large databases. Because of its simple form and it can be easily understood, association mining has been successfully applied to many fields. It not only can test the knowledge modes e*iting in the industry, but also can find some new rules hidden.As education innovation in China being enhanced, higher education in been significantly developed.At present, in all kinds of schools,the school database has been well constructed and has stored enormous education and teaching information. According to some researches, the historical data with a large number of educational information of historical data has not been well used or dig the education rules hidden in the database out. Consequently, the majors of a number of higher education schools have little distinction,and the course schedules have no clear distinction.Graduates are hard to find suitable job according with their education e*perience.To analyze the reasons, besides current curriculum can not be kept up with the actual employers requirement,there are also many hidden reasons,which result in lackness of students ability after three to five-year education.However, some petent students have been constrained by majors or some undiscovered factors. The purpose of this article is to dig out correct,reliable and credible correlative rules from a large amount of education information.Based on data warehouse,OLAP technology and data mining,this thesis analyzes higher education school graduates employment data.Through students major, students location,education e*perience and employed time,on-line analysis and data mining has been carried out to find out that internal reason of employment status of the student from different aspects and different levels and discover major arrangement requirements from the students,which could offer a decision-making support for course design and education method.目录摘要Abstract第一章 引言1.1研究的背景、目的和意义1.2数据挖掘的含义1.3国外开展和研究现状第二章学生就业管理系统数据仓库的设计与实现2.1确定指导主题2.2就业数据仓库建模第三章数据挖掘在学生就业中的应用3.1数据挖掘应用流程3.2数据挖掘应用流程第四章总结附录-代码一引言1.1研究的背景、目的和意义世界在进步,人类在开展,各项技术都在不断的开展和完善,当然数据库技术也不会例外,储存在数据库中的数据量也在不断的增大,当然这也是得益于互联网的出现,互联网的出现使人类的信息交流不再受到空间的限制,让所有人可以通过互联网十分方便的交换各种数据信息。在互联网不断的开展过程中,人们拿到的数据也像滚雪球一样,越来越大,大量数据的背后隐藏着许多重要的信息,人们通过对其深入的分析,希望能从中得到那些十分重要或有价值的数据信息。数据库系统并不能自动的找出十分重要或有价值的数据信息,这就孕育出来数据挖掘。从这个词的意思不难理解,人们拥有着大量的数据信息,要从大量的数据信息中找出隐藏在其中的十分重要或有价值的数据信息,就需要不断的进展掘。在现在数据挖掘已经被广泛的运用在各个领域,并且都取得的令人满意的效果。在我们国家教育改革的不断开展深入的过程中,高等教育也在大踏步的前进,高等院校如雨后春笋般的在增长。随着教育信息化的推进,几乎所有学校的办公室、教室都配有电脑,而且绝大多数的学校都建立有自己的校园网络,学校的所有数据信息都能在网络上查询到。这些数据信息里面我们将其分为三大类:第一类是学校的行政管理信息:如重要会议通知、教学简报、各种活动报道等;第二类是教学信息:如课程安排、任课教师情况、教学质量检查情况等;第三类是学生信息:如学生的根本资料、每学期成绩、表彰获奖情况等。在这三类信息中学生信息本该最为重要,但却得不到重视,只是在学期末寄发成绩单时才被使用。通过数据挖掘技术所发现的专业、家庭经济状况、地域分布与就业的关系,合理的引导学生选择专业,最终提高学生的就业率。从而对高等教育及其教学改革具有一定的指导性意义。1.2数据挖掘的含义数据挖掘data mining又称数据库中的知识发现Knowledge Discovery in Database,简称KDD,比拟公认的定义是由等人提出的:数据挖掘就是从大量的、不完全的、有噪声的、模糊的、随机的数据集中,提取隐含在其中的、人们事先不知道的、但又是潜在的有用的信息和知识的过程,提取的知识表示为概念Concepts、规则(Rules)、规律(Regularities)、模式(Patterns)等形式。数据挖掘是一种决策支持过程,分析各组织原有的数据,做出归纳的推理,从中挖掘出潜在的模式,为管理人员决策提供支持。1.3 国外开展和研究现状相应地,数据挖掘在国外商场、金融信用评估,欺诈监测、电讯、科学、保险等领域早已有不同层次的应用。数据挖掘在商业领域有丰富应用:客户关系管理、欺诈检测、供给链分析、医疗分析、文件分析文本挖掘、决策支持系统和财务分析。而在政府方面的应用主要有财务管理、人力资源管理、欺诈侦测、分析社会现象、打击恐惧主义、处理人们对政府数据的访问。国数据挖掘还是一个很新的研究课题,并处于一个初步应用的层次,但它所固有的为企业创造巨大经济效益的潜力,已使其很快有了许多成功的应用,具有代表性的应用领域有市场预测、投资、制造业、金融、通讯等,数据挖掘目前还在国家资助975,863,基金的科研工程中有着重要的应用价值。我国数据挖掘研究与开发的总体水平相当于数据库技术在20世纪70年代所处的地位,迫切需要类似于关系模式、DBMS系统和SQL查询语言等理论和方法的指导,才能使数据挖掘这项技术的应用得以普遍推广。预计在未来一段时间数据挖掘的研究焦点可能会集中到以下几个方面:1发现语言的形式化描述,即研究专门用于知识发现的数据挖掘语言;2寻求数据挖掘过程中的可视化方法,使知识发现的过程能够被用户理解,也便于在知识发现的过程中进展人机交互;3研究在网络环境下的数据挖掘技术Web Mining,特别是在因特网上建立DM效劳器,并且与数据库效劳器配合,实现 Web Mining;4加强对各种非构造化数据的开采Data Mining for Audio& Video,如对文本数据、图形数据、视频图像数据、声音数据乃至综合多媒体数据的开采;5处理的数据将会涉及到更多的数据类型;6交互式发现;7知识的维护更新。1.4数据挖掘的根本技术1聚类/分割。聚类或分割是一种将数据分组方法类或集群是有着相似的模式或特征。各专题组从数据确定,而不是依赖预定义类分类。零售商可以利用聚类发现类似情况在他们的客户群存在,使他们能够创立和理解它们销售和市场的不同群体。2关联分析。寻找大量数据中项集之间的关联或相关联系。例如通过对交易数据的分析,我们可能得出30%-40%购置纸尿布的男性顾客会同时购置啤酒这样的关联规则。关联规则广泛用于购物篮或事务数据分析。3序列模式。序列模式分析和关联分析类似,其目的也是为了挖掘数据之间的联系,但序列模式分析的侧重点在于分析数据间的前后序列关系。序列模式分析描述的问题是:在给定交易序列数据库中,每个序列是按照交易时间排列的一组交易集,挖掘序列函数作用在这个交易序列数据库上,返回该数据库中出现的高频序列。4人工神经网络和遗传算法。人工神经网络在数据挖掘中也扮演着非常重要的角色。人工神经网络可通过例如学习,形成描述复杂非线性系统的非线性函数,这实际上是得到了客观规律的定量描人工述。目前在数据挖掘中,最常使用的两种神经网络是BP网络和RBF网络。二、 学生就业管理系统数据仓库的设计与实现建立学生就业数据仓库首先要根据学生就业数据仓库这个主题进展建模,主题明确后,才能根据主题确定需要的表;建模完成后紧接着就是对就业数据仓库进展设计,包括设计多维数据分析的事实表和维表;完成设计后就要加载数据,在这个过程中要设计数据加载程序,包含将集成的细节数据转化成不同综合层次的数据综合功能和将数据清洗、转化和集成的装载功能;最后进展数据质量评估。2.1确定指导主题确定指导主题实际就是划分围,根据围选取数据明确分析目的。就业指导分析关注的四个指导主题是成绩、专业、生源构造、就业时间的影响分析。1. 成绩影响分析。高等院校学生不仅在学校课程中学习文化知识,还要学习更多的专业技能,提高学生的整体素质,为毕业后能尽快参加工作、走向社会做好准备。因此,学生在学校的表现和智力成果由德育成绩和智育成绩组成,包括平时成绩和参加学校组织的技能比赛的获奖情况。在面临就业时,德育和智育成绩上下对学生的就业就会产生一定的影响,这是值得分析的一个问题。通过考察智育、德育等的因素,可以找出社会需要什么样的职业技能人才。2. 专业影响分析。雇主需要什么样的专业技能人才,在一定程度成为了高等院校开设专业的一种向导。可以通过各专业的学生就业的形势的分析可进一步指导学校对专业的设置。3. 生源构造影响分析。由于是全国围的录取,所以学生会来自全国各地,每个人的家庭经济条件都不一样。这些来自不同区域、不同类型的学生对他们就业区域、就业岗位、待遇都有不同的要求。所以对生源构造的整体分析,可以为毕业生实习、就业提供有意义的指导。4. 就业时间影响分析。在大环境的变动,同时影响到学生的就业率和就业质量。所以对就业时间与专业的分析,很容易获得哪些专业易于就业提出指导性建议。2.2就业数据仓库建模数据仓库就是将从不同数据源中提取出来的数据全部存储到数据仓库中,数据存储的量很大,而且对数据查询的要求也相当高。一般的的数据建模都是从概念建模、逻辑建模、物理建模这样的自上而下的建模方式。概念建模主要是以信息打包的方式;逻辑建模的方式多采用星型建模方法和雪花建模方法;物理建模主要是以3NF和星型建模方式。概念建模概念模型是一个概念性的工具。效劳于目标设计系统、收集信息等,在与用户沟通的过程中来定义数据仓库需要访问的信息,包括当前、将来和历史相关的数据信息。可以在需求分析阶段,确定操作数据、数据源以及一些附加数据,设计容易理解的数据模型,有效地完成查询和数据之间的映射。在本工程中使用的信息包图是概念模型中最常用的一种。超立方体也是一种常用的概念模型,但当维度超过三维后其直观性非常的差,大大增加了数据的采集和表示困难,出于这种原因Hammergren于1997年提出了信息包图可以在平面上展开超立方体,它让超立方体的表示可视化了。信息包图方法要先明确分析的主题,接着围绕这个主题装载指标、维度、粒度等信息。指标是分析主题的评估指标。而维度是用户访问评估信息的途径。粒度是维度息的详细程度。维度表和事实表设计将会直接影响到数据仓库的响应时间和分析结果,所以说数据仓库构建的关键问题是维度表和事实表的设计。维是最能反映用户的分析或者观察对象的角度,而且它必须表达出数据仓库中数据粒度、数据的层次。要按既定的分析主题组织事实表和维度表,下列图建立的就业指导数据仓库概念模型就是用信息包图方法。信息包图逻辑建模逻辑建模是数据仓库实施中的重要组成局部,从逻辑建模中能直观看出工程的需求。逻辑模型就是要将明确的主题和维的信息映射到数据仓库中的具体的表格里面。星型模型和雪花模型都是常用星型模型。1、星型模型的建模理论是由中心一点向外扩散,中心对象是事实表,外面假设干个对象是维表,星型模型就是由事实表和假设干个维表连接而成的。事实表的特点主要是包含的数字数据能够进展汇总并提供有关各项动作的历史数据。作为外键的相关维度表的主键被包含在每个事实表中的一个或多个局部组成的索引中。星型模型能支持以决策者的想法和定义数据实体,满足面向主题数据仓库设计的需求,而信息包图能提供完备的概念根底给星形图的设计。星形图包括维度、指标和类别三个逻辑实体。指标实体是位于星形图中心的实体,给用户活动提供定量数据,是根本实体和查询活动的中心。每一个指标实体表示一系列相关事实,完成一项指定的功能,代表一个现实事务的综合水平,只与每一个相关维度的一个点对应。维度实体位于星形图的星角上,其作用是限制用户的查询结果,到达过滤数据,减小访问围的目的。2、雪花模型可以看做是增加了粒度层次的描述的星型模型,其中*些维是规化的,可把数据进一步分解到附加的表中。可以用多表来描述一个层次构造复杂的维来到达用户需要的效果。根据数据仓库应用中的易使用与高性能的思想,结合本课题的设计需求,星型模型构造相对简单能利用位图索引提高查询速度,而雪花模型构造较为复杂,更适合用于处理维层级复杂的模型,本工程选用星型模型作为就业数据仓库逻辑建模的模型,如下列图所示:就业数据仓库的星型模型物理建模逻辑模型在数据仓库中的实现就是数据仓库的物理模型,包括物理存取方式、数据存放位置、数据存储构造以及存储分配等。逻辑模型实现物理模型的根底,在进展物理模型设计实现时,需要考虑因素有:I/O存取时间、空间利用率和维护代价。从数据仓库上讲,实际存储的模式包括关系模型和多维模型两种。多维模型按照多维来存储数据这样查询速度会非常快。因为多维存储需要大量的存储空间,所以在大容量的情况下性能会下降。并且索引在多维存储框架中不好建立。因此多维存储构造一般应用在数据量较小的,保存聚集数据的数据集市和OLAP效劳器中。在数据仓库中的大量数据要进展分析,要将有用的数据从这些数据中查找出来,物理模型中需要提供迅捷的查询速度是整个设计的关键所在,物理建模中索引技术、减少表连接操作、预聚集技术和分割技术都可以提高数据仓库的查询速度。 1、索引技术是在数据库中以牺牲空间和索引维护时间为代价来加快表息检索速度,因多维数据库本身就是为了检索而建立的一种存储模型,所以多维数据库中索引技术并不是很重要,使用位图索引技术是数据仓库用来减少存储空间的一种技术。 2、减少表连接操作可以减少系统资源的暂用量,从而到达加快数据仓库的查询速度。因为数据仓库中维表和事实表的连接是可能存在的,所以要尽可能的减少表的连接操作。3、预聚集技术是通过预先聚集一些数据来加快分析的速度。预聚集技术在对需要聚集数据量大,聚集频率高时采用可以到达加快数据分析速率的效果。4、分割技术就是去除掉不使用的数据,从而来提高数据分析速率。数据仓库量的数据并一定所有都能使用上,有一局部数据使用不上的数据,在进展分析时需要将这些使用不到的数据进展分割,这样如果只分析那些有用的数据就可以加快分析的速度。根据本工程需要分析的主题,数据仓库的物理表构造如下:就业信息事事实表、成绩档次维表、专业维表、地区维表、就业时间维表、就业状况维表、单位性质维表,如下列图所示:就业信息事实表成绩档次维表专业维表地区维表就业时间维表就业状况维表单位性质维表在完成数据仓库的物理建模后,下一步就是建立数据仓库数据库,并建立事实表和维度表,并在所有表中的主要字段上建立索引。使用MS SQL Server 2008关系数据库管理系统作为数据仓库的物理存储,根据数据仓库物理建模,利用关系数据库来构建数据仓库。要最终实现数据仓库除了完成就业数据仓库的设计,还要先进展数据的清洗、抽取、转换、加载。三数据挖掘在学生就业中的应用3.1数据挖掘应用流程学生就业管理系统挖掘工具通过节点的连接以工作流的方式来实现数据挖掘过程。它能支持跨行业数据挖掘标准流程CRISPDM,本文的数据挖掘流程挖掘对象为就业数据仓库,实施步骤流程如下列图所示:数据挖掘实施步骤流程图数据挖掘流程依据过程模型CRISPDM可理解成这些步骤,首先进展问题理解和提出,然后开场数据准备,数据准备完成后就进展建立模型,从而生成规则,最后做出评价和解释。 1、问题理解和提出:分析、理解希望能从中发现学生就业与时间、成绩、生源地、专业它们之间的联系。 2、数据准备:针对不同的分析目的,直接利用就业数据仓库,通过学生就业管理系统挖掘工具前端处理工具,如增加记录选项选择、抽样、汇总等等、字段选项类型、过滤等等节点来抽取数据仓库中的一定数量的子集,建立数据挖掘库。 3、建立模型:根据数据挖掘的目标和数据的特征,选择适宜的模型,选用学生就业管理系统挖掘工具中的以改良后的 Apriori 算法的多维关联规则模型、来进展挖掘分析。4、评价和解释:对数据挖掘的结果进展评价,并能结合就业工作实际对结果进展解释。3.2基于关联规则的挖掘搜索单维频繁谓词就业信息事务表有较多维属性,如要找到这些属性所构成的频繁谓词集,先要获得各维属性所全部包含的频繁谓词。利用SQL语言直接对数据库进展操作的方式。开场利用SQL中的Distinct语句对经过数据预处理的就业信息事务表进展操作,返回表里每个属性维包含的所有谓词。假设一个字段有重复的值,但是每个值只被选取一次,这时可使用关键字DISTINCT来做。SELECT DISDINCTFROM就业信息事务表其中的字段名称是随选择的列不同而变化的量,不同的字段名称会返回不同的值。接着扫描数据库就业信息事务数据表。利用SQL中非常有用的集合函数函数COUNT语句对Distinct语句返回的每一属性值进展计数。用这个函数我们可以得到一个表中有多少条记录。例如:对性别字段,分别调用以下SQL语句:COUNT(*)FROM 就业信息事务表 WHERE 性别=男COUNT(*)FROM 就业信息事务表 WHERE 性别=女对所有字段都进展上述操作,如果返回的计数值与就业信息事务表中总事务数的比值大于最小支持度min_sup,则保存下来,否则从谓词集表中删除。这样下来对学生信息的每一维属性而言,保存下来的都是满足支持度的单维频繁谓词。最后在此一维频繁谓词根底上,进展K维频繁谓词的挖掘,流程如下列图所示:频繁谓词挖掘流程求取多维频繁项集因为该工程进展的是多维关联规则挖掘,则工程的核心算法就是对多维频繁谓词集的求取。最根本的多维关联规则算法是基于经典的Apriori算法改造而得的,但大量候选频繁谓词集可能会在该算法中产生,这样就会降低算法性能。我们对根本的多维关联规则算法和基于Apriori不产生候选的多维关联规则算法进展了以下比拟分析。1、基于经典的Apiori算法求多维频繁谓词得到一维频繁谓词后,为了发现频繁2-谓词集,需要将频繁1-谓词集进展连接产生候选频繁2-谓词集,然后对其中的每个谓词集计数:假设满足最小支持度则保存为频繁2-谓词集,否则丢弃;为了发现频繁3-谓词集,需要将频繁2-谓词集进展连接和剪枝;以此类推,为了发现频繁K-谓词集,就需要将频繁(K-1)-谓词集进展连接和剪枝。上述算法在利用Apriori性质由频繁K-谓词集求频繁K+1谓词集的过程中,必须先产生频繁K+1候选谓词集。我们的数据库随时间的增长会越来越大、属性维也会不断地增多,则每次产生的候选集合的数量也会非常多,会给我们带来较大的时间开销。本课题在下面提出的算法就是针对这一个缺点,使用递归的方式直接由短频繁模式生成长频繁模式,从而防止了大量候选谓词集的额外时间开销。这样也无需Apriori算法中的剪枝步骤,能加大算法效率。改良后的Apriori 算法流程图如下列图所示:改良后的Apriori算法流程图2、 不产生候选的多维关联规则Apriori算法描述流程图的核心是如何由频繁 K-谓词项求频繁K+1谓词项,在这里是通过函数的递归调用来实现的,整个过程如下:算法开场执行后,首先找出频繁一维谓词集,然后在频繁一维谓词集的根底上,发现所有的频繁K维谓词集。例如,一维频繁谓词取为性别-男,则二维谓词就取性别-男生源地-德阳。假设该二维模式的计数值满足最小支持度,就继续取三维谓词:性别-男生源地-德阳毕业成绩-高;假设该二维模式的计数值不满足最小支持度,则所有含有性别-男生源地-德阳的多维模式就都不会再被扫描,算法就由三维谓词转为对二维谓词性别-男生源地-进展计数,再作像前面的判断。经过不断地在频繁谓词末尾添加后缀判断,就能找出所有的频繁K维谓词集。产生强关联规则强关联规则流程图关联规则一般都是基于支持度和置信度框架的,发现频繁 K-谓词集的过程,就是找出所有满足最小支持度的频繁谓词项。然后我们就是要在这些频繁谓词项的根底上,通过满足最小置信度来生产强关联规则。强关联规则的流程图如上图所示。相关性分析通过前面的多维关联规则挖掘算法,我们能得到所有的频繁维谓词集,并能将它们都作为一系列的强关联规则。然后对这些挖掘出的强关联规则使用相关度的概念进展相关性分析。对于每一条多维关联规则,都会涉及到我们需要关心的*个属性维,将它作为最后要输出规则的结论记为B;而其他的属性维就作为最后要输出规则的条件记为A。AB作为频繁谓词项,其计数值在算法过程中就已经保存;由Apriori性质,AB的子集A和B必是频繁的,所以它们的计数值也已经在算法过程中保存。因此,我们通过公式: 就能判断每条规则的相关性。四、总结本文主要论述数据仓库的构建与数据挖掘技术及其应用。将通过对已毕业学生数据信息专业、生源地、成绩、就业时间进展联机分析与数据挖掘,找寻出对学生就业产生影响的原因所在,并到达为职业技术院校专业设置和教学提供决策支持。主要完成了以下几方面的工作: 1、将现有的软件工具进展分析比拟,选择较适用的数据仓库平台SQL Server2008及学生就业管理系统数据挖掘工具。2、通过使用SQL Server 2008来建立就业指导数据仓库的设计与实现。3、在进展数据挖掘的时候使用了改良后的 Apriori 算法,这个改良的算法防止了Apriori算法在数据量非常大的情况下给我们带来的较大的开销,提高了效率。4、进展数据的深入挖掘后得到规则,对得到的规则能做出较为合理的解释,说明这样的数据挖掘是有一定的作用的,能提供给决策者较为准确的参考信息,希望能在以后学院的开展中起到重要的作用。随着社会的不断开展,国家也日益重视高等院校的开展,高等院校的学生就业方式也变的多元化、自主化,各个高等院校在日趋剧烈的竞争中如何脱颖而出已成为学校生存的关键所在。本课题的研究说明,就业数据仓库的建立为决策分析提供了一定的根底,而将OLAP及数据挖掘技术应用于就业指导领域的话,我们就能从就业信息中发现各种潜在规则,以及发现就业率下降的原因所在。这将指导就业决策人员进展就业策略地调整,科学的指导就业、合理开设专业、高效的开展宣传,最终到达提高就业率和保证就业质量的目标。这些是对职业技术院校扩大规模、提高办学质量具有重要的实践意义。参考文献1志华.Web数据挖掘在个性化网络学习系统中的应用研究.20082贺清碧,胡久永.数据挖掘技术综述.民族大学学报(自然科学版).2003,29(3):328-3303红岩,剑,国清.挖掘中的数据分类算法综述.清华大学学报(自然科学版),2002,42(6):727-7304银奎,廖丽,宋俊一数据挖掘原理.:机械工业.2003附录根据总体设计数据访问层由两局部组成,第一局部设计成一个根底框架,通过接口过过具体数据库;第二局部,设计相应的代码生成工具,完成实体类及管理类的设计。为方便调用,根本框架被设计成类库的形式,类库名AgileWeb.Framework,有关数据库访问的类文件均放在子空间 Data文件文下。一、根底框架中重要的类1、定义定动程序定定.NE T支持的四种类型 public enum DatabaseType SQLServer, /SQL数据库 OLEDB, /采用OLEDB类型数据库 Oracle, /Oracle数据 ODBC, /采用ODBC类型数据库 2、从ADO.NET框架可以看出,针对各类数据库访问的类均要现相应的接口,所有的DataReader从DbDataReader继承,而DbDataReader的子类均要现IdataReader接口,利用这一特性,可以构建一个与数据库无关的BEDataReader。 public class BEDataReader : IDisposable private IDataReader dr; /接口IdataReader对象dr public BEDataReader() public BEDataReader(IDataReader i_dr) this.SetReader(i_dr); /初始化dr对象 public void Close() this.dr.Close(); / 统计当前D ataReader对象的字段个数 public int FieldCount() int fieldCount = 0; if (this.dr != null) fieldCount = this.dr.FieldCount; return fieldCount; / 以object返回当前DataReader对象所指记录的字段值,以字段序号为参数 public object Get(int inde*) return this.drinde*; / 以object返回当前DataReader对象所指记录的字段值,以字段名为参数 public object Get(string name) return this.drname; public bool Read() return this.dr.Read(); / 让dr去指向具体类型的数据库DataReader对象 public void SetReader(IDataReader sdr) this.dr = sdr as IDataReader; / 释放dr的连接对象 public void Dispose() this.dr.Dispose(); 3、BEDataReader可以通过接口来完成对具体类型的DataReader类的调用,而具体的DataReader对象必须由相应的命令对象来完成,而不同类型数据库的使用了不用的连接对象,BEmand提供了对连接对象和命令对象的封装,执行数据库SQL,返回执行结果。 public class BEmand protected IDbmand mand; /命令对象 protected IDbConnection Connection; /连接对象 private string CurrentDBName; /数据库名称 private DatabaseType DBType; / 数据库类型,默认SQL Server public bool hasActiveTransaction; /是否是用数据库事务 protected IDbTransaction Transaction; /事务对象 /默认的构造函数 public BEmand() this.CurrentDBName = ; this.InitBEmand(, ); / 构造函数使用SQL,作为参数 public BEmand(string sql) this.CurrentDBName = ; this.InitBEmand(sql, ); / 构造函数使用SQL和DBName作为参数 public BEmand(string sql, string DBName) this.CurrentDBName = ; this.InitBEmand(sql, DBName); /命令对象开场事务操作 public void BeginTransaction() try /获取事务对象 this.Transaction=this.Connection.BeginTransaction(); /在命令对象上是用事务 this.mand.Transaction = this.Transaction; this.hasActiveTransaction = true; catch (E*ception e*ception) throw e*ception; /去除命令的参数对象 public void Clear() if (this.mand != null) this.mand.Parameters.Clear(); /关闭数据库的连接 public void Close() try this.Connection.Close(); catch /提交数据库事务 public void mit() try this.Transaction.mit(); catch (E*ception e*ception) throw e*ception; finally this.hasActiveTransaction = false; / 执行非Select的SQL语句 public int E*ecuteNonQuery() int num; try num = this.mand.E*ecuteNonQuery(); catch (E*ception e*ception) throw e*ception; return num; / 执行Select查询,返回IDataReader类型的对象 public IDataReader E*ecuteReader() IDataReader obj2; try obj2 = this.mand.E*ecuteReader(); catch (E*ception e*ception) throw e*ception; return obj2; / 初始化BEmand对象。 private void InitBEmand(string sql, string DBName) string str = SQL; try / 访问Web.Config文件中的数据库类型信息 str = ConfigurationManager.AppSettingsDBType; catch / 根据str的值确定当前数据库的类型 if (str != null & str != SQL) if (str = ORACLE) this.DBType = DatabaseType.Oracle; else if (str = OLEDB) this.DBType = DatabaseType.OLEDB; else this.DBType = DatabaseType.ODBC; else this.DBType = DatabaseType.SQLServer; /让连接接口对象、命令接口对象指向相应实际类型的数据库访问对象 this.CurrentDBName = DBName; switch (this.DBType) case DatabaseType.SQLServer: /SQL Server数据库 this.Connection = new SqlConnection(dBConnectionString); this.mand = new Sqlmand(); break; case DatabaseType.OLEDB: /OLEDB 数据库 this.Connection = new OleDbConnection(dBConnectionString); this.mand = new OleDbmand(); break; case DatabaseType.Oracle: /Oracle数据库 this.Connection = new OracleConnection(dBConnectionString); this.mand = new Oraclemand(); break; case DatabaseType.ODBC: /ODBC数据库 this.Connection = new OdbcConnection(dBConnectionString); this.mand = new Odbcmand(); break; this.Connection.Open(); this.mand.mandTe*t = sql; this.mand.Connection = this.Connection; /回滚当前数据库的事务操作 public void Rollback() this.hasActiveTransaction = false; if(this.Transaction!=null)&(this.Transaction.Connection != null) try this.Transaction.Rollback(); catch (E*ception e*ception) throw e*ception; / 为自定义的BEmand对象提供参数设置,根据类型创立不同的参数对象 public void SetParameters(string name, object nvalue) IDbDataParameter parameter = null; /参数对象的接口引用 try switch (this.DBType) case DatabaseType.SQLServer: parameter = new SqlParameter(); /SQL Server参数对象 break; case DatabaseType.OLEDB: parameter = new OleDbParameter(); /OLEDB参数对象 break; case DatabaseType.Oracle: parameter = new OracleParameter(); /ORACLE参数对象 break; case DatabaseType.ODBC: parameter = new OdbcParameter(); /ODBC参数对象 break; /对于参数长度超过 4000的相应的长文本类型 if (nvalue.ToString().Length 0*fa0) switch (this.DBType) case DatabaseType.SQLServer: (SqlParameter) parameter).SqlDbType = SqlDbTyp
展开阅读全文