1 / 48

VB.NET 程序设计

VB.NET 程序设计. 任务三 访问 Access 数据库. 学习目标. 1 、了解数据库、表、字段、记录等基本概念 2 、了解使用 Access 系统创建 Access 数据库 3 、掌握访问 Access 数据库的方法. 数据库术语. 数据库( Database ): 存储于文件中的有组织的信息集合 数据表( Table ): 由行和列组成的信息集合 字段( Field ): 存储于数据库中的信息的类别 记录 (Record) : 有关一个特定客户或企业的所有信息叫一条记录. ADO.NET.

seoras
Download Presentation

VB.NET 程序设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. VB.NET程序设计 任务三 访问Access数据库

  2. 学习目标 • 1、了解数据库、表、字段、记录等基本概念 • 2、了解使用Access系统创建Access数据库 • 3、掌握访问Access数据库的方法

  3. 数据库术语 • 数据库(Database):存储于文件中的有组织的信息集合 • 数据表(Table):由行和列组成的信息集合 • 字段(Field):存储于数据库中的信息的类别 • 记录(Record):有关一个特定客户或企业的所有信息叫一条记录

  4. ADO.NET 1、VB.NET并非是用来创建新数据库的,而是用于显示、分析和操作数据库中的信息。 2、 ADO.NET是VB.NET提供的一种新的访问数据库的数据模型(或叫数据访问工具),通过这种数据模型可以访问更多格式的数据库(如Access、FoxPro、Paradox、Oracle、SQL Server等);也不管这些数据库放在什么位置都能访问(本地或是网上)。 3、组成ADO.NET的是一些类,这些类位于System.Data命名空间中,他们提供了连接数据库、读取数据库和更新数据库等操作。

  5. 预备知识——结构化查询语言SQL • SQL是一种标准化的数据库查询语言,虽说是一种查询语言,但它可完成对数据库的各种操作,包括数据的查询、增加、修改、删除以及其他操作。 • SQL主要语句: Select语句、Insert语句、Update语句、Delete语句。

  6. 预备知识——结构化查询语言SQL • Select语句的语法格式: Select 字段名 From 数据表名 [ Where 条件 ] 举例: • Select * From 学生信息 • Select * From 学生信息 Where 姓名=“李丽” • Select 姓名 From 学生信息 Where 姓名=“李丽” • select * from student1 where 学号<=3 • select * from student1 where 学号 Between 5 And 10

  7. 预备知识——结构化查询语言SQL Select语句举例: • select * from student1 where 姓名 like “刘*” • select * from 书名 where 书籍类别 In (“数据库”,”Internet”) • select * from 书名 where 书籍类别 In (“数据库”) And PubID=1 • select * from student1 where 姓名 like “刘*” order by 学号 ASC • 注:使用ORDER BY子句排序,升序的关键字为ASC,降序为DESC 。

  8. 预备知识——结构化查询语言SQL update 、 insert 、 delete 语句举例: • insert into StuInfo(name,age) values( “张山” ,19) • update StuInfo set name=“张三“,age=18 where id=005 • delete * from StuInfo where id = 18

  9. 使用Access创建数据库 操作步骤: • 1、启动Access办公软件 • 2、→文件/新建 • 3、双击“使用设计器创建表” • 4、设置主键:右击某个字段名,选“主键” • 5、添加数据:双击表名,直接添加数据,保存

  10. 访问Access数据库——显示

  11. 2 1 3 访问Access数据库——显示 方法一:在Visual Studio.NET中建立连接 • 1、从工具箱中的“数据”标签中双击OleDbDataAdapter对象 如果工具箱中的“数据”标签中没有OleDbDataAdapter对象,则可以右击“数据”工具箱中某控件例如DataSet控件,从弹出的快捷菜单中执行[选择项…]命令(如图),打开“选择工具箱项”对话框,选择“.NET Framework组件”选项卡,从中选择OleDbDataAdapter这三个组件(在这三项组件的名称前的方框内打勾即可)。单击“确定”按钮,这三个组件就被添加到工具箱中了。

  12. 2 1 4 3 方法一:在Visual Studio.NET中建立连接 接下来,出现“数据适配器配置向导”对话框,点击“新建连接”按钮。出现“添加连接”对话框。可以执行“更改”选择数据源的类型。这里选择“其他”,然后点“确定”,接着,在OLE DB提供程序下选择: Microsoft Jet 4.0 OLE DB Provider

  13. 2 1 方法一:在Visual Studio.NET中建立连接 • 点“数据链接”按钮。出现“数据链接属性”对话框,在“连接”选项卡中选择或输入数据库名称右边的小按钮中选取数据库文件。选好后,点“测试连接”,提示“测试连接成功”

  14. 2 1 4 图3 3 方法一:在Visual Studio.NET中建立连接 • 点“确定”,回到“添加连接”对话框 • 点“确定”,回到“数据适配器配置向导”对话框,可以查看连接字符串。 • 点“下一步”,出现如图3对话框。这里请选择“是”(那么访问数据库时,将是相对路径,即.exe可执行文件和数据库文件将在同一个目录下),接着再点“下一步”

  15. 1 3 2 方法一:在Visual Studio.NET中建立连接 • 出现如图后,点“查询生成器”按钮。选择要用的表,然后点“添加”,把要用的字段依次打勾。然后点“确定”。

  16. 1 2 方法一:在Visual Studio.NET中建立连接 • 回到如图对话框,点“下一步”,点“完成”。最终,窗体下方生成“OleDbDataAdapter1”和“OleDbConnection1”两个对象(如图)。 3

  17. 2 1 3 方法一:在Visual Studio.NET中建立连接 右键“OleDbDataAdapter1”,选择“生成数据集…”,点“确定”后,生成数据集对象“DataSet11” 3

  18. 方法一:在Visual Studio.NET中建立连接 2、将数据源绑定到一个或多个显示控件上 • 问题:什么样的控件可以做为数据源的显示控件? • 一般来说,凡是具有DataBindings属性的控件都可做显示控件,典型的例子: TextBox 、Label、ComboBox等控件

  19. 方法一:在Visual Studio.NET中建立连接 将数据源绑定控件的操作如下: • 在属性窗口中设置文本框的DataBindings属性 • 打开DataBindings分类,单击Text属性,单击下拉箭头 • 选择某个数据集对象中某个表的某个字段

  20. 方法一:在Visual Studio.NET中建立连接 3、编写一部分代码 • 关键代码:利用数据适配器给数据集手动加载数据 • OleDbDataAdapter1.Fill(Dataset11) • 上述代码可以放在某个命令按钮的单击事件过程中,也可放在窗体的Load事件过程中

  21. 方法一:在Visual Studio.NET中建立连接 • 课堂实训

  22. 访问Access数据库——显示 创建导航控件

  23. 访问Access数据库——显示 创建导航控件的代码: ’首条 • Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click • Me.BindingContext(DataSet11, "职员基本信息表").Position = 0 • End Sub • ‘最后一条 • Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click • Me.BindingContext(DataSet11, "职员基本信息表").Position = Me.BindingContext(DataSet11, "职员基本信息表").Count - 1 • End Sub • ’ 前一条 • Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click • Me.BindingContext(DataSet11, "职员基本信息表").Position -= 1 • End Sub • ‘下一条 • Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click • Me.BindingContext(DataSet11, "职员基本信息表").Position += 1 • End Sub

  24. 访问Access数据库——显示 方法二:使用较多的代码 ADO.NET对象结构

  25. 方法二:使用较多的代码 ADO.NET对象功能(访问数据库时要用到的对象及步骤) • 1 、Connection对象负责连接数据库 • 2、 Command对象负责对数据库下达SQL命令 • 3、在ADO.NET中,介于Dataset和Connection对象之间还有一个对象DataAdapter,负责传递数据。 • 4、Dataset对象用来保存所查询到的数据记录,是一种非连接的数据缓存。

  26. 方法二:使用较多的代码 创建Connection对象时,可以使用2个类: 1、SqlConnection类:管理SQL Server 7.0或以上数据源的连接,该类位于System.Data.Sqlclient 命名空间。 2、OledbConnection类:管理可通过OLEDB访问的数据源的连接,例如 Access数据库。该类位于System.Data.OLEDB 命名空间。 同样,创建Command对象和DataAdapter对象时都有2个类可以选择,要看访问的数据源的类型。

  27. 方法二:使用较多的代码 连接好数据库后,用代码绑定数据集到显示控件,如下所示: • Me. TxtName.DataBindings.Add(“Text”, myDataSet, “职员基本信息表.姓名") • Me. TxtID.DataBindings.Add(“Text”, myDataSet, “职员基本信息表.职员编号") 其他要注意的地方: 在类定义的开头要指出数据访问对象所在的命名空间: • Imports System.Data.OleDb

  28. 方法二:使用较多的代码(例子) 例1:用较多代码访问数据库(请注意访问数据库的步骤,访问数据库时使用的是相对路径【数据库文件和可执行文件在同一个文件夹里】) 数据库为Student.mdb,有一个Records表,该表字段为:编号,姓名,性别,出生日期,家庭住址,手机,Email,Oicq。 思考:此种情况怎样实现导航功能呢?

  29. 方法二:使用较多的代码( 例子) 绝对路径 例2:请注意定义连接等对象的代码和例1有所不同。 • '说明:本例子并没有用到命令对象,请注意连接对象数据适配器对象的定义和赋值 • ‘1、声明连接字符串(访问该数据库时用的是绝对路径) • Dim sConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\VS2005Project\WindowsApplication7\bin\Debug\Student.mdb;Persist Security Info=False" • '2、声明连接对象 • Dim Mycn As New OleDbConnection(sConnString) • '3、声明命令对象 • 'Dim myCommand As OleDbCommand • '4、声明数据适配器对象 • Dim myDataAdapter As New OleDbDataAdapter • '5、声明数据集对象 • Dim myDataSet As New DataSet • '6、打开连接 • Mycn.Open() • '7、通过数据适配器填充已连接的数据源的数据到数据集中(一个数据适配器只能填充一张表) • Dim mySql As String • mySql = "select * from Records" • myDataAdapter = New OleDbDataAdapter(mySql, Mycn) • myDataAdapter.Fill(myDataSet, "Records") • '8、关闭连接 • Mycn.Close() • '9、用代码绑定数据集到显示控件 • Me.TextBox1.DataBindings.Add("Text", myDataSet, "Records.编号") • Me.TextBox2.DataBindings.Add("Text", myDataSet, "Records.姓名") • Me.TextBox3.DataBindings.Add("Text", myDataSet, "Records.性别") • Me.TextBox4.DataBindings.Add("Text", myDataSet, "Records.出生日期") • Me.TextBox5.DataBindings.Add("Text", myDataSet, "Records.家庭住址") • Me.TextBox6.DataBindings.Add("Text", myDataSet, "Records.手机") • Me.TextBox7.DataBindings.Add("Text", myDataSet, "Records.Email") • Me.TextBox8.DataBindings.Add("Text", myDataSet, "Records.Oicq") 思考:此种情况怎样实现导航功能呢?

  30. 思考 • 方法一和方法二有本质的区别吗?

  31. 关于Command对象 • Command对象的主要属性: 1、Connection属性:设置用于执行命令的Connection对象。 2、CommandText属性:设置被执行的SQL语句。 • 下面两段代码的效果相同(声明命令对象有二种方法): Dim sConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\luo\人力资源管理系统\hrmbook.mdb;Persist Security Info=False" Dim Mycn As New OleDbConnection(sConnString) Dim myCom As OleDbCommand ‘此方法声明可以不用关键字New,当然用也可以 Dim mySql As String mySql = "select sum(奖励金额) as 奖金, 职员编号 from 职员奖励表“ Mycom = New OleDbCommand(mySql,Mycn) Dim sConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\luo\人力资源管理系统\hrmbook.mdb;Persist Security Info=False" Dim Mycn As New OleDbConnection(sConnString) Dim myCom As New OleDbCommand ‘此方法声明一定要用关键字New Dim mySql As String mySql = "select sum(奖励金额) as 奖金, 职员编号 from 职员奖励表“ Mycom.Connection = Mycn Mycom.CommandText = mySql

  32. 关于Command对象 • Command对象的方法: 1、ExecuteNonQuery方法:执行一个SQL命令,但不返回结果,只返回一个值说明有多少行数据被处理。 2、ExecuteReader方法:执行一个SQL命令,并生成DataReader对象作为结果返回。使用该方法时要先创建DataReader对象用来获取数据。 • 案例见:DataBase.vb和frmSalary.vb

  33. 关于DataReader对象 • DataReader对象是基于连接的数据流,它一次只将一个记录导入内存,而不会将结果集的所有记录同时返回,因此可以避免耗费大量内存资源。 1、Read方法:读取DataReader对象的下一行记录。 详解:当DataReader对象首次打开时它被置于文件开始位置即第一行之前,当调用一次Read方法, DataReader才会移动到结果集的第一行处。以后每调用依次Read方法, DataReader都会移动到结果集的下一行处,直到Read方法返回False为止,表明此时查询无结果。 2、GetType方法:将指定列的值作为指定类型获取。例如:GetString方法表示将取得的字段数据设为字符串 • 案例见: frmSalary.vb

  34. DataReader对象举例1

  35. DataReader对象举例2 • Dim sConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\luo\人力资源管理系统\hrmbook.mdb;Persist Security Info=False" • Dim Mycn As New OleDbConnection(sConnString) • Dim myCom As OleDbCommand • Mycn.Open() • Dim mySql , strSQL As String • mySql = "select sum(奖励金额) as 奖金, 职员编号 from 职员奖励表“ • Mycom=New OleDbCommand(mySql,Mycn) • Dim dr As OleDbDataReader • dr = Mycom.ExecuteReader • While (dr.Read()) • Dim jine As Double = dr.GetDouble(0) • Dim id As String = dr.GetString(1) • strSQL = “update 月工资统计表 set 奖金=” + jine.ToString() + “ where 职 员编号='" & id & “’” • End While • dr.Close() • Mycom=New OleDbCommand(strSQL,Mycn) • Mycom.ExecuteNonQuery() 注意:该案例只执行了月工资统计表最后一条记录的更新,如何完善程序?见DataBase.vb和frmSalary.vb(通过数组知识和事务知识)

  36. Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click Try '异常处理,防止添加记录时出错 '请注意SQL语句的书写,特别要注意:哪两个双引号相互匹配,哪两个单引号相互匹配 Dim str As String = "insert into Records(编号,姓名,性别,出生日期,家庭住址,手机,Email,Oicq) values('" & Me.TextBox1.Text & "','" & Me.TextBox2.Text & "','" & Me.TextBox3.Text & "','" & Me.TextBox4.Text & "','" & Me.TextBox5.Text & "','" & Me.TextBox6.Text & "','" & Me.TextBox7.Text & "','" & Me.TextBox8.Text & "')" '声明命令对象 Dim mycom As OleDb.OleDbCommand mycom = New OleDb.OleDbCommand(str, Me.OleDbConnection1) '打开连接 Me.OleDbConnection1.Open() '执行无返回结果的查询命令ExecuteNonQuery mycom.ExecuteNonQuery() '清空数据集,因为数据库的内容已经发生变化 Me.DataSet11.Clear() Me.BindingContext(Me.DataSet11, "Records").ResumeBinding() ‘恢复数据绑定 '把最新的数据重新填充到数据集 Me.OleDbDataAdapter1.Fill(Me.DataSet11, "Records") '关闭连接 Me.OleDbConnection1.Close() Me.btnClear.Enabled = True '清空功能可用 Me.btnSave.Enabled = False '保存功能不可用 MsgBox("记录添加成功!") '出现错误时执行。ex的Message包含了错误的信息 Catch ex As Exception Me.BindingContext(Me.DataSet11, "Records").ResumeBinding() ‘恢复数据绑定 Me.OleDbConnection1.Close() MsgBox(ex.Message) End Try End Sub 2、内容录入完毕后,保存到数据库 Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click '把各文本框清空,准备录入新的记录 Me.BindingContext(Me.DataSet11, "Records").SuspendBinding() '挂起数据绑定 Me.TextBox1.Text = "" Me.TextBox2.Text = "" Me.TextBox3.Text = "" Me.TextBox4.Text = "" Me.TextBox5.Text = "" Me.TextBox6.Text = "" Me.TextBox7.Text = "" Me.TextBox8.Text = "" Me.btnSave.Enabled = True '保存功能可用 Me.btnClear.Enabled = False '清空功能不可用 Me.TextBox1.Focus() End Sub 1、清空各文本框内容,准备录入记录 访问Access数据库——增加

  37. 访问Access数据库——增加 例子1:程序运行界面图

  38. 访问Access数据库——修改 修改记录时,主键字段不可更改,因此,该SQL语句有一个where条件语句 Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click Try Dim str As String = "update Records set 姓名='" & Me.TextBox2.Text & "',性别='" & Me.TextBox3.Text & "',出生日期='" & Me.TextBox4.Text & "',家庭住址='" & Me.TextBox5.Text & "',手机='" & Me.TextBox6.Text & "',Email='" & Me.TextBox7.Text & "',Oicq='" & Me.TextBox8.Text & "' where 编号='" & Me.TextBox1.Text & "'" Dim mycom As OleDb.OleDbCommand mycom = New OleDb.OleDbCommand(str, Me.OleDbConnection1) Me.OleDbConnection1.Open() mycom.ExecuteNonQuery() Me.DataSet11.Clear() Me.OleDbDataAdapter1.Fill(Me.DataSet11, "Records") Me.OleDbConnection1.Close() MsgBox("记录修改成功!") Catch ex As Exception Me.OleDbConnection1.Close() MsgBox(ex.Message) End Try End Sub

  39. 访问Access数据库——删除 Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click Try Dim str As String = "delete from Records where 编号='" & Me.TextBox1.Text & "'" Dim mycom As OleDb.OleDbCommand mycom = New OleDb.OleDbCommand(str, Me.OleDbConnection1) Me.OleDbConnection1.Open() mycom.ExecuteNonQuery() Me.DataSet11.Clear() Me.OleDbDataAdapter1.Fill(Me.DataSet11, "Records") Me.OleDbConnection1.Close() MsgBox("记录删除成功!") Catch ex As Exception Me.OleDbConnection1.Close() MsgBox(ex.Message) End Try End Sub

  40. 1 添加控件 2 设置属性 3 运行界面 关于DataGridView控件 • DataGridView控件具有极高的可配置性和可扩展性,它提供大量的属性、方法和事件,可以用来对该控件的外观和行为进行自定义。 • 当需要在Windows窗体应用程序中显示表格数据时,应首先考虑使用DataGridView控件,然后再考虑使用其他控件(例如DataGrid)。 • 一般设置两个属性: DataSource:某个数据集对象 DataMember:该数据集对象的某个表

  41. 2 1 3 关于DataGrid控件 • DataGrid控件用于显示数据表中的数据,该控件可用来显示单个表,也可以显示多个不相关的表,也可以显示多个相关的表。具体的用法详见“任务七” 若工具箱中找不到DataGrid控件,可以在“所用 Windows窗体”分组工具箱中,右键,然后选择“选择项…”,在出现的窗口中,选择“.NET Framework组件”选项卡,找到“DataGrid”然后在其前面打勾。然后点“确定”。那么DataGrid就添加到工具箱中。

  42. 关于DataView • DataView类:表示用于排序、筛选、搜索和编辑的 表(DataTable )的可绑定数据的自定义视图。 • 创建 DataView 对象的方法: 方法一:使用 DataView 构造函数 Dim custDV As DataView = New DataView(custDS.Tables("Customers")) 方法二:创建对 DataTable 的 DefaultView 属性的引用 Dim custDV As DataView = custDS.Tables("Customers").DefaultView

  43. 关于DataView DataView对象的属性: • Sort属性:获取或设置 DataView 的一个或多个排序。 例:Dataview1.Sort = “Name Asc” Dataview1.Sort = “Name Desc” • RowFilter属性:获取或设置用于筛选在 DataView 中查看哪些行的表达式。 例:Dataview1. RowFilter = “Name like ‘%陈%’” • RowStateFilter属性:获取或设置用于 DataView 中的行状态筛选器。 例: Dataview1. RowStateFilter = DataViewRowState.CurrentRows Dataview1. RowStateFilter = DataViewRowState. ModifiedOriginal ___所有 Modified 行的 Original 行版本。

  44. 1 2 3 关于DataView的一个例子 若工具箱中找不到DataView控件,可以在“所用 Windows窗体”分组工具箱中,右键,然后选择“选择项…”,在出现的窗口中,选择“.NET Framework组件”选项卡,找到“DataView”然后在其前面打勾。然后点“确定”。那么DataView就添加到工具箱中。

  45. 1 4 3 2 关于DataView的一个例子 双击“DataView”控件后,在当前窗体下方会出现“DataView1”对象,在DataView1控件的属性窗口中,设置它的 Tabel属性:某个数据集对象某个表 接着把DataViewGrid控件的DataSource属性设置为DataView1。这样就可以使用DataView的属性:

  46. 课堂实训 • 实训1:创建一个Access数据库student,建一表Records,该表字段(字段类型均为文本,编号为主键):编号,姓名,性别,出生日期,家庭住址,手机,Email,Oicq。 在VB.NET环境中创建一个访问该数据库的系统(包括显示、修改、删除、增加和保存等功能)。如图所示界面。 • 实训2:利用数据库访问知识完善真实登录窗体frmlogin的代码

  47. 书面作业 • 工资管理系统 • 具体要求请看Word文档

  48. 补充内容 • 访问数据库的另外一种方法 • 具体例子及内容参考文件夹“任务三相关例子及代码”文件夹里的

More Related