VB.Net数据库访问
应用程序与数据库进行通信,首先检索存储在数据库中的数据,并以便于用户使用的方式显示;其次,通过插入,修改和删除数据来更新数据库中的数据。
Microsoft ActiveX Data Objects.Net(ADO.Net)是一个模型,是.NET应用程序用于检索,访问和更新数据的.Net框架的一部分。
ADO.Net对象模型
ADO.Net对象模型不过是通过各种组件的结构化流程流程。对象模型可以描述如下图所示:
在数据存储或数据库中的数据通过数据提供者(DataProvider)检索。数据提供者的各种组件检索应用程序的数据并更新数据。
应用程序通过数据集或数据读取器访问数据。
- 数据集(Datasets)将数据存储在已断开连接的缓存中,应用程序将从中检索数据。
- 数据读取器(Data readers)以只读和只进模式向应用程序提供数据。
数据提供者
数据提供者用于连接到数据库,执行命令和检索数据,将其存储在数据集中,读取检索到的数据并更新数据库。
ADO.Net
中的数据提供者由以下四个对象组成:
编号 | 对象 | 描述 |
---|---|---|
1 | Connection |
该组件用于与数据源建立连接。 |
2 | Command |
命令是用于检索,插入,删除或修改数据源中的数据的SQL语句或存储过程。 |
3 | DataReader |
数据读取器用于以只读和只进模式从数据源检索数据。 |
4 | DataAdapter |
这对ADO.Net的工作是不可或缺的,因为数据通过数据适配器传输到数据库和从数据库传输。它从数据库检索数据到数据集并更新数据库。对数据集进行更改时,数据库中的更改实际上是由数据适配器完成的。 |
ADO.Net中包含以下不同类型的数据提供程序 -
- SQL Server的.Net Framework数据提供程序 - 提供对Microsoft SQL Server的访问。
- OLE DB的.Net Framework数据提供程序 - 提供对使用OLE DB公开的数据源的访问。
- 用于ODBC的.Net Framework数据提供程序 - 提供对由ODBC公开的数据源的访问。
- Oracle的.Net Framework数据提供程序 - 提供对Oracle数据源的访问。
- EntityClient提供者 - 允许通过实体数据模型(EDM)应用程序访问数据。
数据集(DataSet)
数据集(DataSet)是数据的内存中表示。 它是从数据库中检索的一个断开的,高速缓存的一组记录。 与数据库建立连接后,数据适配器将创建一个数据集并在其中存储数据。 在数据被检索并存储在数据集中之后,与数据库的连接被关闭。这被称为“断开连接的架构”。 该数据集作为包含表,行和列的虚拟数据库运行。
下图显示了数据集对象模型:
DataSet
类存在于System.Data
命名空间中。下表介绍了DataSet
的所有组件:
编号 | 组件 | 描述 |
---|---|---|
1 | DataTableCollection |
它包含从数据源检索的所有表。 |
2 | DataRelationCollection |
它包含数据集中表之间的关系和链接。 |
3 | ExtendedProperties |
它包含额外的信息,如用于检索数据的SQL语句,检索时间等。 |
4 | DataTable |
它表示数据集DataTableCollection 中的一个表。它是由DataRow 和DataColumn 对象组成。DataTable 对象区分大小写。 |
5 | DataRelation |
它表示数据集DataRelationshipCollection 中的关系。 它用于通过DataColumn 对象将两个DataTable 对象相互关联。 |
6 | DataRowCollection |
它包含DataTable 中的所有行。 |
7 | DataView |
它代表一个DataTable 的固定定制视图,用于排序,过滤,搜索,编辑和导航。 |
8 | PrimaryKey |
它表示唯一标识DataTable 中的行的列。 |
9 | DataRow |
它表示DataTable 中的一行。 DataRow 对象及其属性和方法用于检索,评估,插入,删除和更新DataTable 中的值。 NewRow 方法用于创建新行,Add 方法向表中添加一行。 |
10 | DataColumnCollection |
它代表DataTable 中的所有列。 |
11 | DataColumn |
它由组成DataTable 的列数组成。 |
连接到数据库
.Net框架提供了两种类型的连接类:
- SqlConnection - 用于连接到Microsoft SQL Server。
- OleDbConnection - 设计用于连接到各种数据库,如Microsoft Access和Oracle。
示例1
在名为testDB的数据库中有一个名为Customers
的存储在Microsoft SQL Server中的表。请参阅SQL Server教程在SQL Server中创建数据库和数据库表。
下面演示如何连接到这个数据库(假设已经创建好了一个名称为:testdb 的数据库),参考以下步骤:
- 选择工具 -> 连接到数据库,如下图所示 -
- 在“添加连接”对话框中选择一个服务器名称(这是里:MY-PC)和数据库名称。如下图所示 -
- 点击测试连接 按钮,检查连接是否成功。成功如下图所示 -
- 在窗体上添加一个
DataGridView
。
- 点击选择数据源组合框。没有任何数据源的情况下如下所示 -
在上图中,点击添加项目数据源链接。
这将打开数据源配置向导。选择数据库 作为数据源类型。然后下一步 -
- 选择数据集作为数据库模型。如下图所示 -
- 选择已经建立的连接。如下图所示 -
- 保存连接字符串。如下图所示 -
- 在这个示例中选择数据库对象
customers
表,然后单击完成 按钮。如下图所示 -
- 选择预览数据 链接以查看网格中的数据,如下图所示 -
当使用Microsoft Visual Studio工具栏上的“开始”按钮运行应用程序时,它将显示以下窗口:
示例2
在这个例子中,将演示如何使用代码访问DataGridView
控件中的数据(创建一个新的项目:DatabaseAccess2)。参考以下步骤:
- 在窗体中添加一个
DataGridView
控件和一个按钮。 - 将按钮控件的文本更改为“从数据库表加载数据”。
双击按钮控件为按钮的Click
事件添加所需的代码,如下所示:
Imports System.Data.SqlClient
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) _
Handles MyBase.Load
'TODO: This line of code loads data into the 'TestDBDataSet.CUSTOMERS' table. You can move, or remove it, as needed.
'Me.CUSTOMERSTableAdapter.Fill(Me.TestDBDataSet.CUSTOMERS)
' Set the caption bar text of the form.
'Me.Text = "yiibai.com"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim connection As SqlConnection = New SqlConnection()
connection.ConnectionString = "Data Source=MY-PC;Initial Catalog=testdb;Integrated Security=True"
connection.Open()
Dim adp As SqlDataAdapter = New SqlDataAdapter _
("select * from customers", connection)
Dim ds As DataSet = New DataSet()
adp.Fill(ds)
DataGridView1.DataSource = ds.Tables(0)
End Sub
End Class
当上面的代码执行并使用Microsoft Visual Studio工具栏上的“开始”按钮运行时,它将显示以下窗口:
单击从数据库表加载数据按钮将显示数据网格视图控件上的表格:
创建表,列和行
前面我们已经讨论过,像DataTable
,DataColumn
和DataRow
这样的DataSet
组件可用于分别创建表,列和行。
以下示例3中演示了这个概念。
示例3
到目前为止,我们已经使用了计算机中已有的数据库和表。 在这个例子中,将创建一个表,向其中添加列,行和数据,并使用DataGridView
对象显示该表结构和数据记录。创建一个名称为:DatabaseAccess3 的项目。
参考以下步骤:
- 在窗体中添加一个DataGridView控件和一个按钮。
- 将按钮控件的
Text
属性值更改为“从数据库表中加载数据”。
在代码编辑器中添加下面的代码。
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' Set the caption bar text of the form.
Me.Text = "从数据库表中加载数据示例 - yiibai.com"
End Sub
Private Function CreateDataSet() As DataSet
'creating a DataSet object for tables
Dim dataset As DataSet = New DataSet()
' creating the student table
Dim Students As DataTable = CreateStudentTable()
dataset.Tables.Add(Students)
Return dataset
End Function
Private Function CreateStudentTable() As DataTable
Dim Students As DataTable
Students = New DataTable("Student")
' adding columns
AddNewColumn(Students, "System.Int32", "StudentID")
AddNewColumn(Students, "System.String", "StudentName")
AddNewColumn(Students, "System.String", "StudentCity")
' adding rows
AddNewRow(Students, 1, "牛大大", "北京")
AddNewRow(Students, 2, "张培胜", "上海")
AddNewRow(Students, 3, "李乔森", "深圳")
AddNewRow(Students, 4, "王小达", "广州")
AddNewRow(Students, 5, "Maxsu", "海口")
Return Students
End Function
Private Sub AddNewColumn(ByRef table As DataTable,
ByVal columnType As String, ByVal columnName As String)
Dim column As DataColumn =
table.Columns.Add(columnName, Type.GetType(columnType))
End Sub
'adding data into the table
Private Sub AddNewRow(ByRef table As DataTable, ByRef id As Integer,
ByRef name As String, ByRef city As String)
Dim newrow As DataRow = table.NewRow()
newrow("StudentID") = id
newrow("StudentName") = name
newrow("StudentCity") = city
table.Rows.Add(newrow)
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ds As New DataSet
ds = CreateDataSet()
DataGridView1.DataSource = ds.Tables("Student")
End Sub
End Class
当上面的代码执行并使用Microsoft Visual Studio工具栏上的“开始”按钮运行时,它将显示以下窗口:
单击“从数据库表中加载数据”按钮将显示数据网格视图控件上的表格: