摘要:本文首先阐述了基于.NET Framework平台的图书馆管理信息系统的开发背景以及其实践意义,其次说明了图书馆管理信息系统的功能以及相比同类软件的创新之处。然后就图书馆管理系统开发中所使用的一些的技术进行研究探讨。主要针对数据库的设计技术、存储过程技术、ADO.NET技术以及用SQL Server .NET Framework 数据提供程序访问SQLserver2000数据库技术四个方面进行了研究。最后还附上了图书馆管理信息系统的安装说明、简单使用说明和一些通用性的经典代码。笔者化了大量的时间用于程序设计,这也是笔者工作的重点,所开发的软件具有实用价值,所编写的代码对.NET程序员也有很好的参考性。在系统的开发过程中,笔者深刻体会到了.NET平台的强大性、优越性以及存储过程在提高数据访问性能和增强数据访问安全性上所起到的重要作用。此外,对于关系代数在数据库科学里的应用,笔者在编程过程中也做了一定的研究。
数据库;.NET Framework;ADO.NET;存储过程;SQL Server .NET Framework 数据提供程序

管理信息系统(以下简称MIS)服务于现代化的企事业管理,是提供企事业工作效率和经济效益的计算机网络系统。管理信息系统涉及的因素非常多、非常复杂,开发起来具有一定的难度。如果掌握了一套行之有效的开发方法,以及把握好MIS开发中的重点,开发中就可以大量的解约人力、财力等。我个人经过大量的研究、实践。认为在MIS开发中,首先数据库技术是MIS开发中的重要技术。数据库开发成败直接影响到整个MIS的开发。所以,构架一个优秀的MIS一定要有好的数据库设计。本文讨论的重点就是数据库设计理论。主要是两方面,一是基本的数据库理论;二是.NET平台上的ADO.NET数据访问技术。其次,在MIS开发过程中,所使用的开发工具和应开发应用程序的种类也很重要。这里就不能不提到Microsoft公司的.NET Framework平台。.NET Framework 是一种新的计算平台,它简化了在高度分布式 Internet 环境中的应用程序开发。它提供一个一致的面向对象的编程环境、提供一个将软件部署和版本控制冲突最小化的代码执行环境等等非常优秀的特点。在以后介绍开发过程中将简单阐述。再次,界面的设计也是MIS的一个重点。界面一定要具有易学性及易使用性。在当今流行的程序设计中,设计包含用户界面的应用程序时有两种选择:Windows 窗体和 Web 窗体。两者在开发环境中都具有完全的设计时支持,并且可以提供丰富的用户界面和高级应用程序功能以解决业务问题。要根据应用程序的具体功能来选择到底开发何种应用程序。我所开发的这个图书馆管理信息系统是这两者的结合。在管理功能方面,我使用了传统的WinForms技术。而在读者使用方面的功能模块,是用webForms开发的。数据库技术是20世纪60年代后期产生何发展起来的一项计算机数据管理技术,现广泛运用与各种信息处理以及科学研究上。数据库技术已经成为当今时代非常重要的技术。当今流行的数据库系统主要是以关系数据库为代表的第二代数据库系统。当今流行的大型数据库管理系统主要有SQL Server、Oracle、Sybase等。图书馆管理信息系统选用的是SQLserver2000数据库管理系统。选择它的原因有:SQLserver2000功能强大,能完整实现数据库系统的所有功能。再者,我们选用的系统开发平台是微软公司的.Net Framework平台,它很好的支持了其公司的数据库产品SQLserver2000,而且为了加快数据处理速度,.NET Framework平台中还专门有一个SQL Server数据提供程序(System.Data.SqlClient)。图书馆管理信息系统使用SQLserver2000数据库管理系统,最后设计的数据库表如下:
图书馆信息表(libInfo)存放图书馆信息,只有一条记录 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
存放位置(外部键- place. Book_place) |
|
|
|
图书分类(外部键- booksort. Book_sort) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
读者类别(外部键- ausort.Au_sort) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

以下我们讨论数据库设计方法时均以图书馆管理信息系统数据库(lib2004)为例.良好的数据规范可以减少数据冗余和一些插入异常和删除异常。使关系模式尽量满足3NF。规范化设计的内容比较多,在这里就不一一阐述。请详细体会lib2004数据库中每个表的构建。如在这方面想有进一步研究的化,请参阅一些数据库原理与技术方面的书籍。
条码号(Book_code)是主关键字,其值就不能够为空。主关键字不一定由一个字段组成,可以是多个字段的组合。(2)引用完整性,又称参照完整性,主要是描述存在关系间引用时,不能引用不存在的元组.

比如在图书分类表(booksort)与图书表(book)之间的关系(如图3-2),这是一个典型的一对多关系。关系的主键方是booksort表中的Book_sort(图书类别)字段,关系的外键方是book表中的Book_code(图书类别)字段。其引用完整性就是book表中的每一本书的图书类别Book_sort或者为空值,或等于图书分类表(booksort)中某行的Book_sort值。这是一种比较有针对性的完整性,由具体环境决定。例如:在读者表(au)中,读者的性别字段(Au_sex)的值必须为‘男’或‘女’。这就是一条用户自定义完整性规则。这类完整性在SQLserver2000中的实现就是对相关表建一个check约束即可。比如在au表中建立一个CK_au约束,其约束表达式为([Au_sex] = '男' or [Au_sex] = '女'),就实现了值必须为‘男’或‘女’的用户自定义完整规则。数据库的保护主要内容是数据库的备份恢复、数据的事务性、以及如何进行并发控制。其中备份和恢复容易理解,这里主要阐述其它两项。(1) 事务是一组操作序列.但是从用户的角度看来,事务是一个不可分割的操作序列。事务中的操作要么都做,要么都不做.事务不应该丢失,不应该被分割完成。举个例子,从某个银行帐户向另一个帐户转入资金。这个过程分两步,首先将资金从一个帐户扣除,然后转入另一帐户。这个过程中,如果资金扣除以后由于一些因素导致失败。则资金就从一个帐户上扣除但没有转到另一个帐户上,就导致了两个用户都失去了这笔资金。如果将这两步组成一个事务,充分利用事务的共进共退性就可以避免这一点。SQLserver2000事务语句主要包括BEGIN TRANSACTION(开始一个事务),COMMIT TRANSACTION(提交事务),ROLLBACK TRANSACTION(回滚事务)。(2) 数据库并发控制:在图书馆管理信息系统中,同时可能有多个客户端在进行数据操作。当多个用户试图同时修改数据时,需要建立控制机制来防止一个用户的修改对同时操作的其他用户所作的修改产生不利的影响。处理这种情况的系统叫做“并发控制”。处理并发的技术主要是封锁。ADO.NET数据结构基于断开的数据,使用开放式并发。在使用 SQL Server 2000 创建应用程序时,T-SQL 编程语言是应用程序和 SQL Server 数据库之间的主要编程接口。使用 T-SQL 程序时,可用两种方法存储和执行程序。可以在本地存储程序,并创建向 SQL Server 发送命令并处理结果的应用程序;也可以将程序在 SQL Server 中存储为存储过程,并创建执行存储过程并处理结果的应用程序。SQL Server 中的存储过程与其它编程语言中的过程类似,原因是存储过程可以:· 接受输入参数并以输出参数的形式将多个值返回至调用过程或批处理。· 包含执行数据库操作(包括调用其它过程)的编程语句。· 向调用过程或批处理返回状态值,以表明成功或失败(以及失败原因)。 使用 SQLServer 中的存储过程而不使用存储在客户计算机本地的 Transact-SQL 程序的优点有:只需创建过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次。存储过程可由在数据库编程方面有专长的人员创建,并可独立于程序源代码而单独修改。如果某操作需要大量 T-SQL 代码或需重复执行,存储过程将比 T-SQL 批代码的执行要快。将在创建存储过程时对其进行分析和优化,并可在首次执行该过程后使用该过程的内存中版本。每次运行 T-SQL 语句时,都要从客户端重复发送,并且在SQL Server每次执行这些语句时,都要对其进行编译和优化。一个需要数百行 T-SQL 代码的操作由一条执行过程代码的单独语句就可实现,而不需要在网络中发送数百行代码。即使对于没有直接执行存储过程中语句的权限的用户,也可授予他们执行该存储过程的权限。此外在web编程方面,存储过程在安全问题上还可以防止动态SQL漏洞攻击,笔者经过一些调查,发现现在很多网站都有动态sql漏洞。只需要将密码字段的值设定为(' or '1'='1)即可使用该网站的管理功能。我所开发的图书馆管理信息系统,无论在windows窗体编程和asp.net Web编程上都使用存储过程与数据库交互。


