Presentation is loading. Please wait.

Presentation is loading. Please wait.

第 8 章 VB.NET与数据库应用程序 本章主要内容: ADO.NET体系结构; VB.NET与SQL Server数据库的连接;

Similar presentations


Presentation on theme: "第 8 章 VB.NET与数据库应用程序 本章主要内容: ADO.NET体系结构; VB.NET与SQL Server数据库的连接;"— Presentation transcript:

1 第 8 章 VB.NET与数据库应用程序 本章主要内容: ADO.NET体系结构; VB.NET与SQL Server数据库的连接;
数据库应用系统开发中的程序设计.

2 8.1 数据库访问技术基本概念 1. 通用数据存取(Universal Data Access, UDA) :
8.1 数据库访问技术基本概念 1. 通用数据存取(Universal Data Access, UDA) : 为了实现“可从任意类型计算机上的任意应用程序中访问任意类型的数据源”,微软提出了UDA概念。而OLE DB和ODBC技术就是这一概念的实现。

3 8.1 数据库访问技术基本概念 UDA的关键是数据访问的透明性。即不管数据在什么地方,数据的提供者可以是各种项目,包括Oracle、 SQL Server数据库、EXCEL、 、文件系统、消息库等等。UDA通过提供简洁的数据访问层解决了异构数据访问的问题。使程序员可以用统一的编程接口,访问不同的数据源。不会因为数据源的不同,而产生程序编写上的不同。

4 8.1 数据库访问技术基本概念 数据 对象接口 RDO ADO ODBC 应用程序 编程接口 其他数据源 关系数据库 OLE DB

5 8.1 数据库访问技术基本概念 ADO(ActiveX Data Object):是在OLE DB的上层,它进一步简化了数据访问编程。使得应用程序访问数据库变得更加方便简单。 ADO.NET采用ADO体系结构模型,并扩展了功能。 本章重点介绍ADO.NET的对象模型功能以及如何利用这些对象建立VB.NET与数据库之间的数据访问功能。

6 8.1 数据库访问技术基本概念 2. ADO.NET体系结构 ADO.NET的主要技术特点 (1)支持断开连接模型。
8.1 数据库访问技术基本概念 2. ADO.NET体系结构 ADO.NET的主要技术特点 (1)支持断开连接模型。 断开连接模型是指一旦获得所需的数据,就断开对数据源的连接,使用离线数据集继续在本机上处理数据。优点是大大减少传输切断数据的开销,保证应用程序不会太长时间持有数据库锁或持久连续占用数据库服务器资源,从而生成有高伸缩性的应用程序。

7 8.1 数据库访问技术基本概念 (2)采用XML作为数据交换的格式。XML是跨平台存储和传输数据的工业标准格式,用XML格式发送信息,可以让程序员很容易将共享数据应用程序中的数据处理和用户接口组件分离到不同服务器中,这对于支持多用户的系统来说,可以较大程度地提高系统的性能和可维护性。

8 8.1 数据库访问技术基本概念 ADO.NET组件 两个核心组件:Dataset和.NET数据提供程序(Data Provider)
8.1 数据库访问技术基本概念 ADO.NET组件 两个核心组件:Dataset和.NET数据提供程序(Data Provider) Dataset对象用于保存数据, .NET数据提供程序通过执行SQL命令或存储过程来存取数据。

9 8.1 数据库访问技术基本概念 .NET Framework数据提供程序 DataAdapter SelectCommand
8.1 数据库访问技术基本概念 .NET Framework数据提供程序 DataAdapter SelectCommand InsertCommand DeleteCommand UpdateCommand DataReader Connection 事务 Command 参数 DataSet Fill DB

10 DataRelationCollection ConstraintCollection DataColumnCollection
8.1 数据库访问技术基本概念 DataTableCollection DataRelationCollection DataSet XML DataRowCollection ConstraintCollection DataColumnCollection 数据表 数据集:由表集和关系集构成。 表集:由若干表构成。 表:由 行集、列集和约束集构成。

11 8.1 数据库访问技术基本概念 说明: Dataset是ADO.NET的断开式结构的核心组件。它的设计目的:实现独立于任何数据源的数据访问。
8.1 数据库访问技术基本概念 说明: Dataset是ADO.NET的断开式结构的核心组件。它的设计目的:实现独立于任何数据源的数据访问。 Dataset把数据以XML形式存放在客户端的内存(不是服务器)。Dataset是与数据源断开的,不知道数据提供者,无论数据源是什么,它都会提供一致的关系编程模型。

12 8.1 数据库访问技术基本概念 (2) .NET Framework数据提供程序:用于实现对底层数据源的访问。组件包括:Connection、Command、DataAdapter和DataReader对象。 ( Connection对象提供与数据源的连接。 Command对象执行数据库命令。 DataReader 从数据源中提供高性能的数据流。 DataAdapter 对象执行SQL命令,将数据采集来放入Dataset对象中。 )

13 8.1 数据库访问技术基本概念 .NET Framework提供了四个数据提供程序:它们分别为不同数据源提供数据访问操作支持。如下表。
8.1 数据库访问技术基本概念 在使用DataSet之前, 都是属于DataProvider的执行范围, 也就是每家数据库厂商各自的存取方式,所以用户必须选择合适的DataProvider对象。 .NET Framework提供了四个数据提供程序:它们分别为不同数据源提供数据访问操作支持。如下表。

14 8.1 数据库访问技术基本概念 Microsoft SQL .NET 数据提供程序 Microsoft OLE DB .NET
8.1 数据库访问技术基本概念 表8.1 ADO.NET的四类数据提供程序 Microsoft SQL .NET 数据提供程序 它使.NET应用程序可以直接访问Microsoft SQL Server 数据库 Microsoft OLE DB .NET 它使.NET应用程序可以使用它们本机OLE DB提供程序访问数据库(可以是不同的数据源) Microsoft ODBC .NET 它使.NET应用程序可以通过使用ODBC访问数据库 Microsoft Oracle .NET 使.NET应用程序可以访问Oracle数据库

15 8.2 数据库访问控件对象 访问数据库主要涉及以下控件对象: SqlConnection //数据库连接对象
8.2 数据库访问控件对象 访问数据库主要涉及以下控件对象: SqlConnection //数据库连接对象 SqlCommand //执行Sql命令对象 SqlDataAdapter //数据适配器对象,用于采集数据并将数据送到客户端数据集DataSet中 DataSet //数据集对象,一个数据集中可存放多个表中内容

16 8.2 数据库访问控件对象 Datatable //数据表对象,查询结果即可送入数据集Dataset,也可送入表Datatable。
8.2 数据库访问控件对象 Datatable //数据表对象,查询结果即可送入数据集Dataset,也可送入表Datatable。 BindingMangerBase // “数据绑定管理器”对象 SqlDataReader //数据只读对象

17 SqlCommand执行查询或更新数据库命令
8.2 数据库访问控件对象 数据访问操作过程: SqlConnection连接数据库 SqlCommand执行查询或更新数据库命令 更新数据库 查询结果送入SqlDataReader 对只读对象中数据进行操作 SqlCommand1. ExcuteNonQuery() SqlDataReader1= SqlCommand1.Excutereader()

18 8.2. 数据库访问控件对象 或 SqlConnection连接数据库 SqldataAdapter执行查询或更新数据库命令 更新数据库
查询结果送入DataSet或DataTable Adapter.SelectCommand. ExcuteNonQuery( ) adapter.Fill( 数据集或数据表 ) 将DataSet或dataTable中数据绑定到 界面的TextBox或DataGrid等控件中 更新数据库

19 8.3 数据更新程序的设计 例1 以下面程序为主讲解更新程序的设计。 运行界面

20 8.3 数据更新程序的设计 设计界面

21 8.3 数据更新程序的设计 1. 首先在界面上放入以下对象并设置相应属性:
8.3 数据更新程序的设计 1. 首先在界面上放入以下对象并设置相应属性: (1) Imagelist图像列表对象Imagelist1。设置属性Image, 在其中放入若干图片。事先收集所用图片并存入该项目的Bin目录下。 (2) ToolBar工具栏对象ToolBar1。设置Buttons属性,为工具栏添加各按钮,如图所示。 (3) Button按钮对象Button1,属性Text=“查询” (4) 若干文本框TextBox对象, 设置Font属性. (5) 若干标签Label对象 和2个GroupBox对象. 设置Text属性和Font属性.

22 8.3 数据更新程序的设计 2. 在工具箱的数据卡中拿一个数据适配器 SqldataAdapter1到界面中,可视化配置适配器。
8.3 数据更新程序的设计 2. 在工具箱的数据卡中拿一个数据适配器 SqldataAdapter1到界面中,可视化配置适配器。 SQL语句为:Select * From 学生 注:也可以拖资源管理器中的“学生”表到界面上,那么“数据库适配器”、适配器用的“数据库连接对象”自动生成。(电脑演示)

23 8.3 数据更新程序的设计 3. 选中SqlDataAdapter1,在属性窗口中出现“生成数据集等操作选项” ,如图所示。
8.3 数据更新程序的设计 3. 选中SqlDataAdapter1,在属性窗口中出现“生成数据集等操作选项” ,如图所示。 单击“生成数据集…”选项,生成Dataset11数据集。 4.设置各Textbox对象数据绑定属性DataBings.Text. 例如:TextBox2的属性DataBings.Text为DataSet11.学生.学号

24 8.3 数据更新程序的设计 5. 引用语句和绑定管理器的定义: Imports System.Data.SqlClient
8.3 数据更新程序的设计 5. 引用语句和绑定管理器的定义: ‘访问数据库使用的引用语句 Imports System.Data.SqlClient Public Class student1 Inherits System.Windows.Forms.Form ‘定义绑定管理器对象 Dim Mybind As BindingManagerBase

25 8.3 数据更新程序的设计 6. Form1窗体对象的Load事件代码: Private Sub student1_Load(。。。)。。。
8.3 数据更新程序的设计 6. Form1窗体对象的Load事件代码: Private Sub student1_Load(。。。)。。。 DataSet11.Clear() Try ‘执行适配器中查询并将结果填写到数据集中 Me.SqlDataAdapter1.Fill(Me.DataSet11, "学生") Catch ex As Exception MessageBox.Show(ex.Message) End Try ‘设置绑定管理器管理的表 Mybind = Me.BindingContext(Me.DataSet11, "学生") End Sub

26 8.3 数据更新程序的设计 7. 工具栏ToolBar1的Click事件代码如下:
8.3 数据更新程序的设计 7. 工具栏ToolBar1的Click事件代码如下: Private Sub ToolBar1_ButtonClick(…, ByVal e As …) … Select Case e.Button.Text Case "首记录" '返回首记录 Mybind.Position = 0 Case "上记录“ '返回上记录 Mybind.Position -= 1 Case "下记录" '返回下记录 Mybind.Position += 1 Case "尾记录" '返回尾记录 Mybind.Position = Mybind.Count - 1 Case "新增" Mybind.AddNew()

27 8.3 数据更新程序的设计 Case "修改" Case "删除" ‘ 删除当前记录
8.3 数据更新程序的设计 Case "修改" Case "删除" ‘ 删除当前记录 Mybind.RemoveAt(Mybind.Position ) Case "保存" Try Mybind.EndCurrentEdit() ‘结束编辑状态 '如果数据集有变化,则保存 If Me.DataSet11.HasChanges = True Then SqlDataAdapter1.Update(Me.DataSet11.学生) End If Catch ex As Exception

28 8.3 数据更新程序的设计 MsgBox(ex.Message) Exit Sub End Try Case "取消"
8.3 数据更新程序的设计 MsgBox(ex.Message) Exit Sub End Try Case "取消" Mybind.CancelCurrentEdit() ‘重新刷新一次数据集 SqlDataAdapter1.Fill(Me.DataSet11, "学生") Case "关闭" Me.Close() End Select End Sub

29 8.3 数据更新程序的设计 8. “查询”按钮Button1的Click事件代码:
8.3 数据更新程序的设计 8. “查询”按钮Button1的Click事件代码: Private Sub Button1_Click(。。。)。。。 Dim sqlstr As String sqlstr = "select * from 学生 where 学号 like ‘" &_ TextBox1.Text & "'" Me.SqlDataAdapter1.SelectCommand. _ CommandText = sqlstr DataSet11.Clear() Me.SqlDataAdapter1.Fill(Me.DataSet11, "学生") End Sub

30 8.4 查询程序的设计 例2:设计按学号或姓名查询的程序。界面如下。

31 8.4 查询程序的设计 步骤:在界面上放以下对象并设置相应 属性. 1. 一个GroupBox对象,3个label对象,3个文本框。
2. 一个button1对象,属性text为“查询”。 3. 一个DataGrid1对象, 可设置Font字体. 4. 引用语句和公共变量定义如下。 注意放置的位置。

32 8.4 查询程序的设计 Imports System.Data.SqlClient ‘引用语句 Public Class Form1
Inherits System.Windows.Forms.Form ‘定义数据库连接字符串 Dim cnnstr As String = "integrated security=SSPI; data source=MICROSOF-3739C7; initial catalog=教学数据库" ‘创建数据库连接对象 Dim cnn As New SqlConnection( cnnstr ) Dim dt As New DataSet ‘ 定义一个数据集 '定义一个数据适配配对象 Dim Adapter As SqlDataAdapter

33 8.4 查询程序的设计 5. “查询”按钮的click事件代码: Private Sub Button1_Click (。。。) 。。。
Dim sqlstr As String ‘定义存放sql语句的字符串 sqlstr = " select * From 学生 Where 学号 like '“ & _ snotxt.Text & “%'" & " and 姓名 like '" & _ nametxt.Text & “%'" ‘sql语句 '创建adapter实例,并指定要执行的sql语句文本 和使用的连接 Adapter = New SqlDataAdapter(sqlstr, cnn)

34 8.4 查询程序的设计 dt.Clear() '清空数据集Dt Try '根据查询条件填写数据集Dt
Adapter.Fill(Me.dt, "学生") Catch ex As Exception MessageBox.Show(Ex.Message) Exit Sub End Try ’设置DataGrid1的数据源 DataGrid1.DataSource = dt.Tables("学生")

35 8.4 查询程序的设计 '求人数 Dim Cmd as new SqlCommand
sqlstr = " select count(*) From 学生 Where 学号 like '“ & _ snotxt.Text & “%'" & " and 姓名 like '" & _ nametxt.Text & “%'” ‘sql语句 cmd.CommandText = sqlstr Cmd.Connection=cnn cnn.Open() Textbox1.text = cmd.ExecuteScalar 'ExecuteScalar返回单个值 cnn.Close End Sub

36 8.5 调用存储过程的查询程序 例3:通过调用存储过程来实现如下所示的查询程序。 图7-6

37 8.5 调用存储过程的查询程序 方法: 1. 打开SQL Server查询分析器。为“教学数据库”创建一个Student_Sno存储过程。
Create procedure Student_sno @sno char(6) Varchar(10) as select * from 学生 where 学号 and 姓名

38 8.5 调用存储过程的查询程序 图7-7

39 8.5 调用存储过程的查询程序 2. 设计程序界面。 布局如图7-8所示,2个标签Label,2个文本框TextBox,1个按钮Button,1个表格DataGrid。 图7-8

40 8.5 调用存储过程的查询程序 3. 各控件主要属性设置。 对象名 属性名 取值 Label1 Text 学号 Label2 姓名
8.5 调用存储过程的查询程序 3. 各控件主要属性设置。 对象名 属性名 取值 Label1 Text 学号 Label2 姓名 Button1 查询 DataGrid1 信息浏览 Form1 Name Student_query1

41 8.5 调用存储过程的查询程序 4. 代码设计: Imports System.Data.SqlClient ‘引用语句
Public Class student_query2 Inherits System.Windows.Forms.Form ‘公共变量定义 Dim cnnstr As String = "integrated security=SSPI; data source=MICROSOF-3739C7; initial catalog=教学数据库" Dim cnn As New SqlConnection(cnnstr) Dim adapter As SqlDataAdapter Dim table1 As New DataTable

42 8.5 调用存储过程的查询程序 ‘查询按钮的Click事件代码 Private Sub Button1_Click( 。。。) 。。。
'Dim sqlstr As String table1.Clear() '清空dtable1 '设置适配器命令文本和连接 adapter = New SqlDataAdapter("student_sno", cnn) ‘设置适配器命令文本类型为存储过程 adapter.SelectCommand.CommandType = _ CommandType.StoredProcedure

43 8.5 调用存储过程的查询程序 '为适配器命令定义参数 Dim para_sno As SqlParameter =
adapter.SelectCommand.Parameters.Add _ SqlDbType.Char, 6) '学号参数 Dim para_sname As SqlParameter = SqlDbType.VarChar, 10) '姓名参数 '将界面值送入参数 para_sno.Value = Me.snotxt.Text para_sname.Value = Me.nametxt.Text

44 8.5 调用存储过程的查询程序 Try '根据查询条件重新填写table1 adapter.Fill(table1)
Catch ex As Exception MessageBox.Show(ex.Message) Exit Sub End Try ‘设置表格数据源为表Table1 DataGrid1.DataSource = table1 End Sub End Class

45 8.6 照片浏览程序设计 例4:浏览学生照片。

46 8.6 照片浏览程序设计 1. 设计程序界面。 布局如图上页图所示,2个标签Label,1个文本框TextBox,1个按钮Button,1个图像框PictureBox 2. 属性设置 (略) 3.代码设计

47 8.6 照片浏览程序设计 Imports System.Data.SqlClient Imports System.IO
Public Class append_phto Inherits System.Windows.Forms.Form ‘定义本类中使用的变量和对象 Dim cnnstr As String = "integrated security=SSPI;data source=MICROSOF-3739C7; initial catalog=教学数据库" Dim sqlstr As String ‘用于装sql语句的字符串变量 Dim cnn As New SqlConnection(cnnstr)

48 8.6 照片浏览程序设计 ‘定义一个SqlCommand对象 Dim cmd As SqlCommand ‘定义一个数据适配器对象
Dim adapter As SqlDataAdapter ‘定义一个数据表 Dim table1 As New DataTable

49 8.6 照片浏览程序设计 Private Sub Button1_Click( …)… ‘显示照片
sqlstr = "select * from 学生 where 学号 like '" & _ TextBox1.Text.Trim & "'" adapter = New SqlDataAdapter(sqlstr, cnn) table1.Clear() adapter.Fill(table1) ‘将数据填入数据表Table1 If table1.Rows.Count = 0 Then MessageBox.Show("没有这个学生!") PictureBox1.Image = Nothing '清空图像框 exit Sub End If

50 8.6 照片浏览程序设计 Dim b() As Byte Try '读照片字段中的数据到数组
b = table1.Rows(0)("照片") Catch ex As SystemException '若不能显示,清除图形框 Me.PictureBox1.Image = Nothing MessageBox.Show("无照片!") Exit Sub End Try '传送数组B中内容到MemoryStream对象S Dim S As New System.IO.MemoryStream(b)

51 8.6 照片浏览程序设计 Try '显示照片 Me.PictureBox1.Image = Image.FromStream(S)
Catch ex As SystemException '若不能显示,清除图形框 Me.PictureBox1.Image = Nothing End Try End Sub End Class

52 8.7 登录程序设计 例5 系统登录程序。界面如下。

53 8.7 登录程序设计 程序代码 Imports System.Data.SqlClient Public Class Form1
Inherits System.Windows.Forms.Form Dim adapter As SqlDataAdapter Dim dtable As New DataTable Private Sub Button2_Click( ……)…… '取消按钮 Me.Close() End Sub

54 8.7 登录程序设计 Private Sub Button1_Click( ….. ) ….. '确定按钮
Dim sqlstr As String If TextBox1.Text <> 0 and TextBox2.Text <> 0 Then sqlstr = "select 密码 from 操作员where 用户名 like '" _ & TextBox1.Text & "' and 密码 like '" & _ TextBox2.Text & "'" Me.adapter = New SqlDataAdapter(sqlstr, _ SqlConnection1) Me.adapter.Fill(dtable) If dtable.Rows.Count = 0 Then MessageBox.Show("密码错误", "信息提示") Exit Sub End If

55 8.7 登录程序设计 MessageBox.Show("欢迎使用系统") Dim f2 As New Form2 Me.Hide()
f2.Show() End If End Sub End Class

56 谢谢! 联系我们: 同济大学计算机系计算机基础教研室


Download ppt "第 8 章 VB.NET与数据库应用程序 本章主要内容: ADO.NET体系结构; VB.NET与SQL Server数据库的连接;"

Similar presentations


Ads by Google