【ACCESS精品源码栏目提醒】:网学会员,鉴于大家对ACCESS精品源码十分关注,论文会员在此为大家搜集整理了“数据库开发实例 - 数据库”一文,供大家参考学习!
第 13 章 数据库开发实例 教学提示:本章以一个教师信息综合管理系统实例为研究对象,详细地介绍如何实现信息录入、查询以及修改。
教学目标:通过本章的学习,要求学生掌握如何以 Visual Basic.NET 为前台应用程序,SQL 作为后台服务器开发数据库应用的一般步骤。
13.1 Visual Basic.NET 中的数据访问 2001 年底,Microsoft 公司向用户推出了 Visual Studio.NET 开发环境,.NET 平台引入了 C中支持类、对象、继承、重载等面向对象的编程机制,特别是在数据访问领域彻底改进了 VB6.0 中的 ADO 基于 COM的技术特征,ADO.NET 支持脱机记录集与 XML 数据文档格式,把模式Schema和数据视为分离的可替换元素,这些技术使记录集很容易在分布式、异种平台构成的环境中使用,使数据访问变得更加简单和高效。
13.1.1 ADO.NET 简介 大多数 Visual Basic.NET 应用程序访问的数据都具有不同的形式,而且数据绝大部分都来自于数据库, 目前比较典型、 使用次数较多的数据库有 Microsoft
Access、Microsoft SQLServer、Oracle 和 Sybase。
Visual Basic.NET 则为连接、检索、查询、更新这些数据库中的数据提供了强有力的支持,并提供了相应的工具。
ADO.NET 是为.NET 框架而创建的,它提供对 Microsoft SQL Server、Oracle 等数据源以及通过 OLE DB 和 XML 公开的数据源的一致访问。
数据共享使用者应用程序可以使用ADO.NET 来连接这些数据源并检索、操作和更新数据。
13.1.2 ADO.NET 对象模型 ADO.NET 的对象模型如图 13.1 所示。
客户端由 Connection 对象来和数据源建立联机,需要提供要连接的服务器名称、数据库文件名称、用户的账户与密码等。
与数据源建立好联机后,再通过 Command 对象对数据源下达索取数据的要求。
自数 据源取回来的数据可以放在 DataAdapter 对象中,或者放在 DataReader 对象中。
DataAdapter 对象可以产生为 DataSet 对象中的一个 DataTable 对象,而 DataReader 对象通常可以直接读取它的结果。
DataAdapter 对象可以用 InsertCommand、UpdateCommand 或者是 DeleteCommand 属性把 DataSet 对象的变动更新回数据库。
DataReader 对象没有这样的功能。
一个 DataSet 对象可以拥有很多个 DataTable 对象。
每个 DataTable 对象,就有各自的 如用来维护 DataTable 的限制;Constraint 对象, 用来记录 DataTable 里每—笔记录的 DataRow308 SQL Server 数据库设计与管理对象;用来记录每个字段的 DataColumn 对象;只是用来浏览而无法做变动的 DataView 对象:还有一个相当重要的 DataRelation 对象,用来建立 DataTable 与 DataTable 间的关联。
图 13.1 ADO.NET 的对象模型 在 DataSet 对象之前属于 Data Provider 对象的范围,也就是各家数据库厂商有各自的存 取 模 式 , 所 以 就 要 搭 配 适 合 的 Data Provider 对 象 。
例 如 , 使 用 SqlConnection 、SqlDataAdapter、SqlCommand 等对象,就只适合连接到 SQL Server 2000。
因为这些对象直接用 SQL 的 API 来存取数据, 所以有着更好的执行效能。
其他有支持早期 OLE DB 格式的数据库,则可以用 OleConnection、OleDataAdapter、OleCommand。
这些 Data Provider 对象的底层仍然是以 COM 的结构通过 OLE DB Provider 来存取数据的。
在 DataSet 之下是 ADO.NET 的范围。
即不管数据源是什么,在系统中所使用的方法都是一样的。
在这一层中,DataSet 与服务器是没关系的,有自己存取数据的方法以及维护数据完整性、关联性、唯一性等的机制。
ADO.NET 对于客户端与数据库的存取模式分为连接模式Connected与非连接模式Disconnected。
连接模式的使用环境适合数据量少,系统的规模也不大,且所有存取的客户端与数据库服务器不位于同一区域网络上。
非连接模式下的数据库存取作业从开始到结束,客户端与服务器端都是保持在联机的状态,所以在大型慢速的广域环境中,这样的模式并不适合。
非连接模式适合什么条件都是“多”的情况下,譬如说数据量大、系统大、网络结构复杂且规模庞大跨区域、跨国界的广域慢速网络、主机多,分散在不同的地方、客户端多等。
13.2 数据库设计 本系统主要是为了说明如何使用 Visual Basic.NET 开发 SQL Server,重点在于介绍开发的步骤以及应用程序的架构,为了叙述方便,所以对数据库设计得比较简单。
308 第 13 章 数据库开发实例 309 数据库设计的内容包括表设计和存储过程设计。
13.2.1 表设计 本系统包括如下两个表。
① “教师基本情况”包括以下信息:编号、姓名、性别、籍贯、出生年月、政治面貌、婚否、毕业时间和地点、学历、照片、备注奖惩情况,如图 13.2 所示。
② “教师联系方式”包括以下信息:编号、联系方式、号码,如图 13.3 所示。
图 13.2 教师基本情况 图 13.3 教师联系方式13.2.2 存储过程设计 在 SQL Server 数据库“教师管理系统”中建立存储过程“删除记录”。
存储过程清单为: if exists select from dbo.sysobjects where id object_idNdbo.删 除记录 and OBJECTPROPERTYid NIsProcedure 1 drop procedure dbo.删除记录 GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GO CREATE PROCEDURE 删除记录 编号 Char 4 as if existsselect from 教师基本情况 where 教师基本情况.编号编号 Begin delete from 教师基本情况 where 教师基本情况.编号编号 end GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO 309310 SQL Server 数据库设计与管理 13.3 Visual Basic.NET 程序设计 本系统使用的数据库是 SQL Server 2000 数据库,采用 C/S 模式。
启动 Visual Basic.NET,在模板中选择创建一个“Windows 应用程序”,并命名为 TeacherSystem。
13.3.1 创建公用类 为了提高代码的效率和维护的方便性,可以在本项目中建立一个公用类,在公用类中放入系统经常使用的函数和全局变量。
公用类源代码如下所示。
Imports System.Data Imports System.Data.SqlClient Public Class clsSQL Region quot 定义成员 quot Dim strTitle As String quot教师管理信息系统quot Dim myConnectionString As String Dim myDataSet As New DataSet 创建一个 sqlConnection 对象 Dim myConnection As New SqlConnection Dim myCommand As New SqlCommand Dim myOtherCommand As New SqlCommand Dim myAdapter As New SqlDataAdapter Dim myOtherAdapter As New SqlDataAdapter End Region Region quot构造函数quot Public Sub New myConnection.ConnectionString myConnectionString End Sub Public Sub NewByRef strConnect As String 重载构造函数 MyBase.New myConnectionString strConnect myConnection.ConnectionString myConnectionString End Sub End Region Region quot 定义属性 quot Public WriteOnly Property SetConnectionString As String SetByVal Value As String myConnectionString Value End Set End Property Public ReadOnly Property DataSet As DataSet Get310 第 13 章 数据库开发实例 311 Return myDataSet End Get End PropertyEnd RegionRegion quot 定义方法 quotPublic Function myFillByRef myQuery As String _ ByRef tableName As String As Boolean Try myConnection.ConnectionString myConnectionString 用 SqlConnection 对象和数据库打开连接 myConnection.Open 用 SqlCommand 对象向数据库索取所要的数据 myCommand.Connection myConnection 定义 Command 对象执行 SQL myCommand.CommandType CommandType.Text myCommand.CommandText myQuery 将 SqlCommand 对象取回来的数据放在 SqlDataAdapter 中 myAdapter.SelectCommand myCommand myDataSet.Clear 把 SqlDataAdapter 对象的数据填满 DataSet 对象 myAdapter.FillmyDataSet tableName 关闭 SqlConnection 对象 myConnection.Close Return True Catch ex As Exception myConnection.Close MsgBoxex.Message MsgBoxStyle.Exclamation strTitle Return False End Try End FunctionPublic Function myUpdateByRef myQuery As String _ByRef tableName As String As Boolean Try myConnection.ConnectionString myConnectionString 用 SqlConnection 对象和数据库打开连接 myConnection.Open 用 SqlCommand 对象向数据库索取所要的数据 myCommand.Connection myConnection 定义 Command 对象执行 SQL myCommand.CommandType CommandType.Text myCommand.CommandText myQuery 将 SqlCommand 对象取回来的数据放在 SqlDataAdapter 中 myAdapter.SelectCommand myCommand CommandBuilder 对象为单个表的更新自动生成 SQL 语句 创建一个 CommandBuilder 对象 Dim sCBuilder As New SqlCommandBuildermyAdapter 分别为 sDAdapter 对象的插入、删除和更新命令赋值 311312 SQL Server 数据库设计与管理 myAdapter.InsertCommand sCBuilder.GetInsertCommand myAdapter.DeleteCommand sCBuilder.GetDeleteCommand myAdapter.UpdateCommand sCBuilder.GetUpdateCommand 把 SqlDataAdapter 对象的数据填满 DataSet 对象 myAdapter.UpdatemyDataSettableName 关闭 SqlConnection 对象 myConnection.Close Return True Catch ex As Exception myConnection.Close MsgBoxex.Message MsgBoxStyle.Exclamation strTitle Return False End Try End Function Public Function myDataRelationByRef parentQuery As String _ ByRef parentTableName As String _ ByRef parentColName As String _ ByRef childQuery As String _ ByRef childTableName As String _ ByRef childColName As String _ ByRef relationName As String As Boolean Try myConnection.ConnectionString myConnectionString 用 SqlConnection 对象和数据库打开连接 myConnection.Open 用 SqlCommand 对象向数据库索取所要的数据 myCommand.Connection myConnection 定义 Command 对象执行 SQL myCommand.CommandType CommandType.Text myCommand.CommandText parentQuery 将 SqlCommand 对象取回来的数据放在 SqlDataAdapter 中 myAdapter.SelectCommand myCommand 把 SqlDataAdapter 对象的数据填满 DataSet 对象 myAdapter.FillmyDataSet parentTableName 用 SqlCommand 对象向数据库索取所要的数据 myOtherCommand.Connection myConnection myOtherCommand.CommandText childQuery 将 SqlCommand 对象取回来的数据放在 SqlDataAdapter 中 myOtherAdapter.SelectCommand myOtherCommand 把 SqlDataAdapter 对象的数据填满 DataSet 对象 myOtherAdapter.FillmyDataSet childTableName Dim myRelation As DataRelation myRelation New DataRelationrelationName _ myDataSet.TablesparentTableName.ColumnsparentColName _ myDataSet.TableschildTableName.ColumnschildColName myDataSet.Relations.AddmyRelation 关闭 SqlConnection 对象 myConnection.Close Return True Catch ex As Exception312 第 13 章 数据库开发实例 313 myConnection.Close MsgBoxex.Message MsgBoxStyle.Exclamation strTitle Return False End Try End Function Public Function myExecuteNonQueryByRef myStoredProcedure As String _ ByRef myParameters As String ByRef myVal As String As Boolean Try myConnection.ConnectionString myConnectionString 用 SqlConnection 对象和数据库打开连接 myConnection.Open 用 SqlCommand 对象向数据库索取所要的数据 myCommand.Connection myConnection 定义 Command 对象将执行存储过程 myCommand.CommandType CommandType.StoredProcedure 定义 Command 对象要执行的存储过程名称 myCommand.CommandText myStoredProcedure 设置存储过程的参数 myCommand.Parameters.Clear myCommand.Parameters.AddmyParameters myVal 执行存储过程 myCommand.ExecuteNonQuery 关闭 SqlConnection 对象 myConnection.Close Return True Catch ex As Exception myConnection.Close MsgBoxex.Message MsgBoxStyle.Exclamation strTitle Return False End Try End Function End Region End Class13.3.2 设计主窗体 本系统中采用多文档界面,方便用户在各个应用程序之间切换。
1. 界面设计 主窗体界面如图 13.4 所示。
图 13.4 主窗体界面 313314 SQL Server 数据库设计与管理 2. 代码设计 主窗体的主要代码如下,其余可以参考随书光盘上的“源代码第 12 章教师管理信息系统”。
Private Function IsmyMDIChildByVal childFormName As String As Boolean Dim childForm As Form 循环检查当前窗体的每一个 MDI 子窗体 For Each childForm In Me.MdiChildren If childForm.Name childFormName Then 变成 MDI 应用系统中的当前活动窗体 childForm.Activate Return True End If Next Return False End Function Private Sub 教师基本情况表_ClickByVal sender As System.Object _ ByVal e As System.EventArgs Handles 教师基本情况表.Click 检查 frmTeachers 是否已经作为 MDI 子窗体打开 If Not IsmyMDIChildquot教师基本情况表quot Then Dim myChild As New 教师基本情况表 定义窗体的 MDI 父窗体 myChild.MdiParent Me myChild.Show End If End Sub Private Sub 教师电话号码表_ClickByVal sender As System.Object _ ByVal e As System.EventArgs Handles 教师电话号码表.Click 检查 frmTeachers 是否已经作为 MDI 子窗体打开 If Not IsmyMDIChildquot教师电话号码表quot Then Dim myChild As New 教师电话号码表 定义窗体的 MDI 父窗体 myChild.MdiParent Me myChild.Show End If End Sub Private Sub 查询基本情况_ClickByVal sender As System.Object _ ByVal e As System.EventArgs Handles 查询基本情况.Click 检查 frmTeachers 是否已经作为 MDI 子窗体打开 If Not IsmyMDIChildquot查询基本情况quot Then Dim myChild As New 查询基本情况 定义窗体的 MDI 父窗体 myChild.MdiParent Me myChild.Show End If End Sub314 第 13 章 数据库开发实例 315 3. 运行效果 主窗体界面的运行效果如图 13.5 所示。
图 13.5 主窗体界面运行效果13.3.3 设计教师基本情况表 【教师基本情况表】窗体的主要功能是为数据录入者提供一个友好的界面,方便地将教师信息录入后台 SQL Server 数据库。
1. 界面设计 【教师基本情况表】窗体界面如图 13.6 所示。
图 13.6 主窗体界面 2. 代码设计 【教师基本情况表】窗体的代码如下所示。
Imports ClassCommon Imports System.IO Public Class 教师基本情况表 Inherits System.Windows.Forms.Form Region quot Windows 窗体设计器生成的代码 quot Const StrTitle As String quot教师基本情况表quot Const MyConnectionString As String quotData Source local _ 315316 SQL Server 数据库设计与管理 Initial Catalog 教师管理系统Integrated SecuritySSPIquot Dim mySQL As New clsSQLMyConnectionString Dim myCurrentManager As CurrencyManager Dim myData As Byte Dim myQuery As String quotselect from 教师基本情况 order by 编号quot Private Sub my_PositionChanged 当前位置信息 If myCurrentManager.Position gt -1 Then With mySQL.DataSet.Table.
上一篇:
宿舍管理系统测试分析报告
下一篇:
政治视域中的行政