VB.Net - 数据库访问

  • 简述

    应用程序与数据库通信,首先,检索存储在那里的数据并以用户友好的方式呈现,其次,通过插入、修改和删除数据来更新数据库。
    Microsoft ActiveX Data Objects.Net (ADO.Net) 是一个模型,是 .Net 框架的一部分,.Net 应用程序使用它来检索、访问和更新数据。
  • ADO.Net 对象模型

    ADO.Net 对象模型只不过是通过各种组件的结构化流程。对象模型可以形象地描述为 -
    ADO.Net 对象
    驻留在数据存储或数据库中的数据通过 data provider. 数据提供者的各种组件为应用程序检索数据并更新数据。
    应用程序通过数据集或数据读取器访问数据。
    • 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是数据的内存表示。它是从数据库中检索到的一组断开连接的缓存记录。当与数据库建立连接时,数据适配器会创建一个数据集并将数据存储在其中。检索数据并存储在数据集中后,关闭与数据库的连接。这被称为“断开连接的架构”。数据集作为包含表、行和列的虚拟数据库工作。
    下图显示了数据集对象模型 -
    VB.Net 数据类
    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
    它代表数据表中的所有列。
    11
    DataColumn
    它由构成 DataTable 的列数组成。
  • 连接到数据库

    .Net 框架提供两种类型的连接类 -
    • SqlConnection - 设计用于连接到 Microsoft SQL Server。
    • OleDbConnection − 设计用于连接各种数据库,如 Microsoft Access 和 Oracle。
  • 示例 1

    我们有一个表存储在 Microsoft SQL Server 中,名为 Customers,位于名为 testDB 的数据库中。请参阅“SQL Server”教程以在 SQL Server 中创建数据库和数据库表。
    让我们连接到这个数据库。采取以下步骤 -
    • 选择工具→连接到数据库
    VB.Net 数据库连接示例
    • 在“添加连接”对话框中选择服务器名称和数据库名称。
    VB.Net 数据库连接
    • 单击“测试连接”按钮以检查连接是否成功。
    连接成功
    • 在窗体上添加一个 DataGridView。
    VB.Net 数据网格视图
    • 单击选择数据源组合框。
    • 单击添加项目数据源链接。
    添加项目数据源链接
    • 这将打开数据源配置向导。
    • 选择数据库作为数据源类型
    数据源
    • 选择 DataSet 作为数据库模型。
    数据库模型
    • 选择已经建立的连接。
    VB.Net 数据库连接
    • 保存连接字符串。
    保存连接字符串
    • 在我们的示例中选择数据库对象 Customers 表,然后单击 Finish 按钮。
    VB.Net 数据库连接
    • 选择预览数据链接以查看结果网格中的数据 -
    数据预览
    当应用程序运行时使用 Start Microsoft Visual Studio 工具栏上可用的按钮,它将显示以下窗口 -
    数据网格视图中的 VB.net 数据
  • 示例 2

    在此示例中,让我们使用代码访问 DataGridView 控件中的数据。采取以下步骤 -
    • 在窗体中添加一个 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 = "jc2182.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=KABIR-DESKTOP; _
             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
    
    • 当上面的代码被执行并运行时使用 Start Microsoft Visual Studio 工具栏上可用的按钮,它将显示以下窗口 -
    数据库连接
    • 单击填充按钮在数据网格视图控件上显示表格 -
    数据库连接
  • 创建表、列和行

    我们已经讨论过像 DataTable、DataColumn 和 DataRow 这样的 DataSet 组件允许我们分别创建表、列和行。
    以下示例演示了该概念 -
  • 示例 3

    到目前为止,我们已经使用了计算机中已经存在的表和数据库。在本例中,我们将创建一个表,向其中添加列、行和数据,并使用 DataGridView 对象显示该表。
    采取以下步骤 -
    • 在窗体中添加一个 DataGridView 控件和一个按钮。
    • 将按钮控件的文本更改为“填充”。
    • 在代码编辑器中添加以下代码。
    
    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 = "tutorialspont.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, "Alex Moo", "Kolkata")
          AddNewRow(Students, 2, "Shreya Sharma", "Delhi")
          AddNewRow(Students, 3, "Rini Mukherjee", "Hyderabad")
          AddNewRow(Students, 4, "Sunil Dubey", "Bikaner")
          AddNewRow(Students, 5, "Rajat Mishra", "Patna")
          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
    
    • 当上面的代码被执行并运行时使用 Start Microsoft Visual Studio 工具栏上可用的按钮,它将显示以下窗口 -
    例子
    • 单击填充按钮在数据网格视图控件上显示表格 -
    例子