第13章数据库开发基本操作_第1页
第13章数据库开发基本操作_第2页
第13章数据库开发基本操作_第3页
第13章数据库开发基本操作_第4页
第13章数据库开发基本操作_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第13章 数据库开发基本操作前面我们学习了很多WinForms的控件,利用这些控件可以快速开发Windows应用程序的界面,在这些程序中只涉及了少量的数据,我们将这些数据存储在文件中。事实上,创建的大部分应用程序都要访问或保存数据,而这些数据基本上都存放在数据库中,比如通过ATM柜员机取钱,只要银行卡和密码正确,就可以查询到你卡中的余额,也可以取出需要的钱,这些都是通过数据库操作最终完成的。常用的数据库有很多种,包括Oracle、MySQL、SQLServer、MS Access等,本书主要使用SQLServer数据库。为了使客户能够访问服务器中的数据库,必须使用数据库访问的方法和技术,.NE

2、T提供的ADO.NET就是一种非常好用易学而且功能强大的数据库访问技术。本章主要学习数据库的基本知识和使用ADO.NET访问数据库的方法和技术。主要内容如下:数据库基础知识创建和连接数据库如何使用VS2008提供的控件快速访问数据库用ADO.NET访问数据库的技术和方法。数据集(DataSet)的使用如何使用DataReader访问数据库数据绑定控件GridView的使用13.1 创建和连接数据库 VS2008内置了Express版本的SQL Server2005,用于学习和开发使用,Express版本的SQL Server并没有提供管理工具(Management Studio),可以使用VS

3、2005的服务器资源管理器来操作数据库,也可以在微软网站下载免费的Express版本的SQLServer Management Studio。网址为:http:/ 首先按照以下步骤连接到本机的SQL Server 2005 Express。13.2 用可视化组件连接并查询数据库示例 VS2008提供了非常简单和方便的方法,可以把数据库中的数据显示在窗体上。下面让我们体会一下VS2008在数据库操作方面的简单、方便和功能强大。在进行下面的步骤之前,首先要保证服务器资源管理器中存在需要的数据库。13.3 用ADO.NET连接数据库 ADO.NET是.NET Framework中不可缺少的一部分,它

4、由一组类组成,通过这些类可以完成对数据库的操作,在程序中使用这些类,必须引入System.Data命名控件。使用ADO.NET不仅可以访问数据库,还可以实现对XML文件和其他存储数据的访问。本节通过学习ADO.NET的组成,掌握使用ADO.NET操纵数据库的方法,使我们编写的应用程序功能更加强大。13.3.1 ADO.NET简介ADO.NET的名称起源于ADO(ActiveX Data Objects),是一个非常广泛的类组,以往的Microsoft访问数据库基本都使用该技术。ADO.NET与ADO的作用相同,但是功能更强大,更容易使用,而且ADO.NET中的类、属性和方法与ADO也有很大的不

5、同。ADO.NET比ADO的功能有很大的改进,其优点主要表现在以下几个方面:可以简单的访问关系数据。ADO.NET的主要目标是可以提供对关系数据的简单访问,它与数据源断开连接时也可使用数据,这主要是基于ADO.NET对数据集(DataSet)的支持。数据集的概念在本章的后面会有详细的讲解。提供对XMI的支持。随着XML的应用越来越广泛,和XML进行交互是数据访问的重要部分。ADO.NET提供了丰富的类实现XML数据的读写。可扩展性强。ADO.NET提供了几种内置的.NET数据提供者,有专门用于连接SQL Server和Oracle数据库的类,也有支持通用数据接口ODBC和OLE DB。因此通过

6、内置的数据提供者,ADO.NET支持几乎所有的数据库或数据格式,具有很香的扩展性。支持多层架构和工厂模式。多层架构是当今商业和电子商务应用程序普遍使用的体系结构,ADO.NET通过使用XML格式的数据对其提供支持。ADO.NET提供了工厂模式,可以在不修改代码的情况下,实现数据库的移植。图13.12显示了ADO.NET在.NET Framework中起的作用。13.3.2 ADO.NET的主要组件ADO.NET提供了两个组件用来访问和处理数据:NET Framework数据提供程序和数据集(DataSet)。.NET Framework数据提供程序包含用于访问各种数据源的数据对象,是专门为数据

7、处理以及快速的只进、只读访问数据而设计的组件,使用这些数据提供程序可以对数据库进行操作,检索、查询、更新、删除数据库中的数据等操作。目前有4种类型的数据提供程序,具体要使用哪种数据提供程序,要根据使用的是什么数据库。数据提供程序使用范围见表13.1。13.3.3 用Connection对象建立数据库连接 【本节示例参考:源代码C13Example_CreateCon】 Connection对象用于打开与数据库的连接,以便对其执行命令。不同的.NET数据提供程序都有自己的连接类,见表13.3。13.3.4 用Command对象检索和操作数据库中数据 创建了数据连接之后,就要对数据库中的数据进行操

8、作,ADO.NET中提供的Command对象可以对数据库执行增、删、改、查。 Command对象属于.NET数据提供程序,不同的数据提供程序有不同的Command对象,见表13.5。13.3.5 查询和检索数据【本节示例参考:源代码C13 Example_School】前面我们学习的Connection对象和Command对象都是为实现数据库操纵而设计的,本节通过一个示例程序,学习使用这两个对象实现数据查询。本例使用的数据库名称为School,数据表名为“Teacher”。创建一个Windows应用程序,在窗体中添加一个按钮“查询”,程序运行时,单击“查询”按钮将检索到的数据显示在消息框(Me

9、ssageBox)中。在按钮“查询”的Click事件中添加代码如代码13- 添加新数据 【本节示例参考:源代码C13 Example_School】 通过ADO.NET中的Command对象可以向数据库发送操作命令,这些操作命令可以是某个SQL语句或存储过程。通常对数据库的操作包括增、删、改、查4种,前三种操作都是单向的,即这些操作修改数据库中数据后并不返回数据。查询属于双向操作,既要向数据库提交查询命令还要从从数据库中获取数据。 注意:所有的单向操作都使用Command对象的ExecuteNonQuery()方法来执行。13.3.7 删除数据【本节示例参考:源代码C13 Ex

10、ample_School】删除数据的过程和插入数据的基本相同,只要改变sql语句即可,具体步骤见上一节,这里就不再详述。给按钮“删除”的Click事件添加代码,示例代码13-3说明了删除数据的操作。13.3.8 更新数据 【本节示例参考:源代码C13 Example_School】 更新数据时唯一不同的地方是sql语句,将更新数据的代码添加到更新按钮的Click事件中。13.4 数据集(DataSet)简介 DataSet对象是ADO.NET的一个重要组成部分,是支持ADO.NET断开式、分布式的数据方案的核心对象,它允许从数据库中检索到的数据存放在内存中,可以理解为一个临时的数据库,可以从任

11、何有效的数据源将数据加载到数据集中。13.4.1 认识数据集简单地说数据集就是内存中的一个临时数据库。如何理解这个概念呢?下面来打一个比喻。工厂一般在每天上班时要把今天用的原料由专人从仓库领出来,放在车间的临时仓库中,由每个工人直接从临时仓库领取,而不是每个人要用材料都去仓库领取。下午下班时要把没有用的材料和制作好的成品都要由专人存放到仓库中。那么数据集就相当于临时仓库,将需要的数据从数据库一次提取出来,提供给用户使用,修改后的结果可以再经由数据集提交给数据库进行保存。数据集把应用程序需要的数据临时保存在内存中,可以实现数据库的断开式访问,应用程序需要数据时,直接从内存中的数据集读取数据,也可

12、以修改数据集中的数据,将修改后的数据一起提交给数据库。数据集的结构和数据库很相似,由表组成,每张表由行和列组成,数据集的结构如图13.21所示。13.4.2 数据集的工作原理 数据集并不直接和数据库打交道,它和数据库之间的相互作用是通过.NET数据提供程序中的数据适配器(DataAdapter)对象来完成的。那么数据集是如何工作的呢?它的工作原理如图13.22所示。13.4.3 如何创建数据集创建数据集对象和创建普通类的对象方法相同,都使用new关键字实例化类,语法如下:DataSet 数据集对象名=new DataSet(“数据集的名称”);语法中的参数“数据集名称”有和没有均可,没有时,系

13、统默认给数据集分配名称为“NewDataSet”,以下写法都是正确的:DataSet da=new DataSet();DataSet da=new DataSet(“book”);VS2008可以通过使用控件的方式创建数据集对象。在工具箱中双击“DataSet”按钮,打开“添加数据集”对话框,在类型化数据集和非类型化数据集中选择,如图13.23所示。如果选择类型化数据集,要求必须已经在项目中有内置架构的数据集,如果没有,是不能创建的。13.4.4 数据适配器(DataAdapter)对象【本节示例参考:源代码C13 Example_DataSetTest】数据集的作用是临时存放数据,其并不直

14、接和数据库打交道,它和数据库之间的相互作用是通过.NET数据提供程序中的数据适配器(DataAdapter)对象来完成的。数据库中的数据需要通过数据适配器的运输才存放到数据集中,而在数据集中的任何修改也要通过数据适配器提交到数据库中,数据适配器就象仓库和车间临时仓库之间运输材料的运货车,而数据连接则是运货车行走的路线。DataAdapter在数据集和数据库之间起桥梁的作用。DataAdapter用于管理与数据库的连接、执行命令并填充数据集和更新数据库。数据适配器属于.NET数据提供程序,不同类型的数据库使用不同的数据适配器,相应的命名空间中的适配器见表13.10。13.4.5 简单实例使用数据

15、集检索数据 【 本 节 示 例 参 考 : 源 代 码 C 1 3 Example_DataSetTest】 本节的应用程序用于根据学号检索学生的详细信息,其界面如图13.25所示。13.5 使用DataReader访问数据 DataReader是.NET数据给程序提供的一个轻量级对象,用来从数据库检索只读的且指针只能向前移的数据流,对于要求优化只读只进数据访问的应用程序,DataReader是一个较好的选择。只读就是只能通过它获取数据而不能修改数据,只进就是读取记录的游标只能向前移动,不能读取了后边的记录返回去读前面的。13.5.1 认识DataReader 对象 使用DataReader对

16、象可以从数据库中检索数据,它每次只能从查询结果中读取一行数据到内存中,并只允许在结果中每次向前移动一个记录。DataReader属于.NET数据提供程序,不同的数据提供程序都有不同的DataReader类。表13.13列出了.NET数据提供程序及其DataReader类。13.5.2 用DataReader读取数据【本节示例参考:源代码C13Example_DataReaderTest】与前面学习的数据提供程序中的其他组件不同,DataReader对象不能直接实例化,需要调用Command对象的ExecuteReader()方法的返回值。使用DataReader读取数据的步骤如下:(1)创建数

17、据连接的Connection对象。(2)创建Command对象。(3)打开数据连接。(4)调用Command对象的ExecuteReader()方法创建DataReader对象,示例如下:SqlDataReader reader=comm. ExecuteReader();其中comm为Command对象。(5)使用DataReader对象的read()方法逐行读取数据。此方法返回一个布尔值,如果读到一行记录,返回true,否则返回false。(6)读取当前行的某列数据。读取数据有两种写法,一种是使用GetValue(i)方法获取值,参数“i”为列的索引,得到的值是Object类型,必须进行数

18、据类型转换。示例如下:string str=reader.GetValue(1).ToString();其中GetValue(1)方法中的参数“1”表示第二列。也可以使用类似索引器的方式访问数据,语法为:(数据类型)DataReader i;或(数据类型)DataReader“列名”;这种方法返回的值也是Object类型的,需要进行拆箱操作,转换数据类型。(7)关闭DataReader对象,调用该对象的Close()方法。如:reader.Close(); 13.6. 用DataGridView 控件显示和操作数据在本章的13.2节中,我们已经见识过DataGridView的强大功能和开发时的

19、简单快速,不过那只是DataGridView 控件最简单的使用方式,该控件除了可以直接显示数据表数据外,还支持排序、数据绑定、自定义外观等高级功能。首先学习一个概念“数据绑定”。C#中的数据绑定就是把数据源和显示数据的窗体中控件进行绑定,绑定后数据源和窗体控件构成了一个逻辑整体,数据源中的数据发生变化,窗体中控件显示的数据也会发生相同的变化。Windows窗体有两种类型的数据绑定:简单绑定和复杂绑定。简单绑定用于TextBox、Label等控件,只能将控件的某个属性绑定到单个数据元素。复杂绑定是指将一个控件绑定到多个数据元素,DataGridView控件绑定数据就属于复杂绑定,它可以一次显示多

20、条记录和多个字段的值。13.6.1 认识DataGridView(数据网格视图)控件 Windows窗体工具箱中的DataGridView控件位于“数据”项中,如图13.27所示。13.6.2 将DataGridView控件绑定到数据集 【本节示例参考:源代码C13 Example_dgViewTest】 DataGridView控件显示数据最简单的方式就是绑定数据源,设置其DataSource属性即可实现。DataGridView控件的数据源可以是数组、集合或数据集,本节介绍绑定到数据集的方法。将DataGridView控件绑定到数据集的步骤如下: 13.6.3 将DataGridView控

21、件绑定到数据视图【本节示例参考:源代码C13 Example_dgViewTest】在用DataGridView控件显示数据的时候,常常并不需要显示表中的全部内容,可能需要显示根据某个条件设定的内容,如只显示学生信息表中的女生,你可能想到利用SQL语句重新查询数据库中的数据,这样是可以实现。使用数据视图可以利用已经获得的数据表,不需要重新进行数据查询,在数据连接断开后也可以实现。数据视图的概念和数据库中的视图概念相似,可用于排序、筛选数据表等操作。视图是为了满足数据的不同需求而存在的,数据库中一个表的数据可以有多个视图,这些视图并不影响原始的数据。如果把数据表中的记录看做一个人,那么视图就像这

22、个人穿的不同衣服,就有不同的形象,而实质上还是同一个人。视图最常用的属性就是进行数据绑定,其重要功能是可以根据表达式或行状态进行行的过滤,通过设置RowFilter属性可以利用表达式进行过滤。13.6.4 保存DataGridView控件修改后的数据【本节示例参考:源代码C13 Example_dgViewTest】利用DataGridView控件显示了数据后,单元格都是可以编辑的,编辑后的数据如何保存到数据库中呢?其实很简单,使用前边学习过的“保存数据集中的数据”的方法,这里就不再详细讲述,只给出示例代码。打开项目Example_dgViewTest,在窗体文件frmStudent中添加按钮

23、“btnSave”,“Text”属性设为“保存”,用来保存DataGridView控件修改后的数据。按钮“btnSave”的“Click”事件处理方法代码如下:01private void btnSave_Click(object sender, EventArgs e)02 03 DialogResult result = MessageBox.Show(要将修改保存到数据库吗?,操作提示, MessageBoxButtons.OKCancel,MessageBoxIcon.Question);04 if (result =DialogResult.OK)05 06 SqlCommandBu

24、ilder bulilder = new SqlCommandBuilder(ada);07 ada.Update(ds,student);08 MessageBox.Show(保存成功);09 10 13.7 综合示例留言板 前面学习了DataReader、DataSet、DataAdapter、DataGridView控件,现在来做一个稍微复杂的例子,综合运用这些控件的功能来实现。 【问题:开发一套用于留言的小留言板】,实现的功能如下: 查询出用户名 查询出相关的留言内容 用户发表留言13.7.1 数据库设计 数据库设计要求如下: 数据库名称:MessageBoard,数据库表UserIn

25、fo所有字段均不允许为空,表UserInfo字段见表.2 创建项目,设计窗体界面 (1)创建项目名称为MessageBoard,窗体名称为frmMessage。 (2)设计frmMessage窗体如图13.34所示。13.7.3 设置窗体中DataGridView的属性 选中DataGridView控件,在属性窗口中找到Columns属性,打开列编辑器,在其中添加如图13.35所示的几列,并把每一列打DataPropertyName属性设为数据表中对应的列名。其中“标识”列对应的是MessageBoard数据表中的主键MessageId,这一列不让用户看到,也不能修改,所以把它的Visible属性设为False,把ReadOnly属性设为True。13.7.4 填充数据集,显示数据 在窗体中声明全局变量,包括数据库连接字符串、数据集、适配器和数据连接对象,并

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论