VB.NET学习笔记:ADO.NET操做ACCESS数据库——ADO.NET数据访问接口

1、ADO.NET概述

Ado.net基于XML和离线计算模型。
ADO.net的两个核心组件:.Net数据提供程序、DataSet。
.net数据提供程序用来与数据库的链接,如SQLServer.net数据提供程序——System.Data.SqlClient, 访问SQl2000或以上版本;OleDb.net数据提供程序——System.Data.OleDb,主要访问Access。
DataSet用来与XML数据链接。设计的目的是独立于任何数据源的数据访问,可有多种不一样数据,也可用于XML数据。可与数据库离线,只在返回数据库时,才保持链接。web

2、ADO.NET核心对象

一、Connection对象负责链接数据库,在System.Data.OleDb空间里对应的是OleDbConnection对象。
二、Command对象负责生成执行SQl语句,在System.Data.OleDb空间里对应的是OleDbCommand对象。
三、DataReader对象负责读取数据库的数据,在System.Data.OleDb空间里对应的是OleDbDataReader对象。
四、DataAdapter对象负责在Command对象执行完SQL语句后生成并填充DataSet和DataTable,在System.Data.OleDb空间里对应的是OleDbDataAdapter对象。
五、DataSet对象负责存取和更新数据。数据库

3、ADO.NET操做ACCESS数据库的通常步骤

一、链接数据库——实例化OleDbConnection对象

OleDbConnection对象构造函数有2个,使用无参构造函数实例化后要设置其ConnectionString属性,而有参构造函数直接把ConnectionString属性值做为参数提供给了构造函数。
无参构造函数实例化代码:ide

Dim conn As New OleDbConnection()
        conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\position.accdb;Jet OLEDB:Database Password=#"

有参构造函数实例化代码:svg

Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\position.accdb;Jet OLEDB:Database Password=#")

能够阅读《ADO.NET操做ACCESS数据库——数据库链接字符串》一文了解如何正确书写和获取链接字符串。函数

二、打开链接

实例化OleDbConnection对象后可使用其Open方法打开链接。测试

conn.Open()

三、下达命令(生成SQL语句)——实例化OleDbCommand对象

OleDbCommand对象有4个构造函数:
OleDbCommand对象的构造函数
实例化OleDbCommand对象时须要设置以下属性:
(1)、CommandText:数据类型为String,要执行的 SQL 语句或存储过程。 默认值为一个空字符串。
(2)、CommandTimeout:数据类型为Int32,等待命令执行所需的时间(以秒为单位)。 默认值为 30 秒。
(3)、CommandType:获取或设置一个值,该值指示如何解释 CommandText 属性。数据类型为CommandType,CommandType 值之一。 默认值为 Text。
CommandType 值有3个,以下所示:
值 数值 描述
StoredProcedure 4 存储过程的名称。
TableDirect 512 表的名称。
Text 1 SQL 文本命令。 (默认。)
(4)、Connection:OleDbConnection实例。 默认值为 null。
(5)、Transaction:若是要执行事务需设置该属性。OleDbTransaction实例。 默认值为 null。
使用无参构造函数实例化代码:.net

Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\position.accdb;Jet OLEDB:Database Password=#")
        Dim cmd As New OleDbCommand()
        cmd.CommandText = "SELECT position.* FROM [position];"
        cmd.CommandTimeout = 30 '默认值为30,因此此句能够省略
        cmd.CommandType = CommandType.Text '这是默认值,因此此句能够省略
        cmd.Connection = conn

能够把属性CommandText或Connection的值做为参数传递给构造函数:设计

Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\position.accdb;Jet OLEDB:Database Password=#")
        Dim cmd As New OleDbCommand("SELECT position.* FROM [position];")
        cmd.Connection = conn

或:code

Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\position.accdb;Jet OLEDB:Database Password=#")
        Dim cmd As New OleDbCommand("SELECT position.* FROM [position];", conn)

四、执行命令

(1)、OleDbCommand对象的ExecuteNonQuery方法

ExecuteNonQuery方法执行 SQL 语句后将返回受影响的行数,而不返回数据集。主要用于执行插入、更新和删除等不须要返回数据集的SQL语句。
测试代码:xml

'链接数据库
        Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\position.accdb;Jet OLEDB:Database Password=#")
        '打开数据库
        conn.Open()
        '生成命令
        Dim cmd As New OleDbCommand("SELECT position.* FROM [position];", conn)
        '执行命令
        cmd.ExecuteNonQuery()
        '关闭数据库
        conn.Close()

结果报错,如图所示:
SQL表名、字段名报错
把SQL语句修改成SELECT [position].* FROM [position]后正常执行命令,估计表名position为系统关键字,因此须要用[]括起。

(2)、OleDbCommand对象的ExecuteReader方法

返回一个OleDbDataReader对象,该对象是一个仅向前的只读数据流,因此主要用来执行基本SQL查询,要求SQL语句返回记录集。
测试代码:

'链接数据库
        Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\position.accdb;Jet OLEDB:Database Password=#")
        '打开数据库
        conn.Open()
        '生成命令
        Dim cmd As New OleDbCommand("SELECT [position].* FROM [position];", conn)
        '执行命令
        Dim dr As OleDbDataReader '不能new.应用程序不直接建立 IDataReader 接口的实例,而是建立继承 IDataReader 的类的实例
        dr = cmd.ExecuteReader()
        Dim dt As New DataTable
        dt.Load(dr)
        DataGridView1.DataSource = dt
        '关闭数据库
        conn.Close()

(3)、OleDbCommand对象的ExecuteScalar方法

执行查询后,返回由查询返回的结果集中的第一行的第一列。 其余列或行将被忽略。也就是说只返回一个值。
测试代码:

'链接数据库
        Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\position.accdb;Jet OLEDB:Database Password=#")
        '打开数据库
        conn.Open()
        '生成命令
        Dim cmd As New OleDbCommand("SELECT [position].* FROM [position];", conn)
        '执行命令
        MessageBox.Show(cmd.ExecuteScalar.ToString)
        '关闭数据库
        conn.Close()

(4)、OleDbDataAdapter数据适配器

OleDbDataAdapter就是一个搬运工:从数据源搬运到本地内存中以便来填充DataSet;或者从本地内中数据搬运回到数据源中。
OleDbDataAdapter对象的构造函数有4个:
OleDbDataAdapter对象的构造函数
构造函数里的参数变化万千,仔细观察却不离其中——实例化OleDbDataAdapter对象(无参数构造函数除外)时必须指定其SelectCommand属性(即一个OleDbCommand对象)。
如:

'链接数据库
        Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\position.accdb;Jet OLEDB:Database Password=#")
        '打开数据库
        conn.Open()
        '生成命令
        Dim cmd As New OleDbCommand("SELECT [position].* FROM [position];", conn)

        '执行命令
        Dim adapter As New OleDbDataAdapter()
        adapter.SelectCommand = cmd
        '填充DataTable
        Dim dt As New DataTable
        adapter.Fill(dt)
        DataGridView1.DataSource = dt

        '关闭数据库
        conn.Close()

上述代码使用OleDbCommand对象的Fill方法来填充DataTable,该方法会自动打开链接,填充完毕后关闭链接,因此不须要conn.Open()和conn.Close()语句,固然若是链接原来是打开的,执行Fill方法后会继续保持打开状态。
也能够把SelectCommand属性做为参数传入构造函数来实例化OleDbDataAdapter对象,即:

Dim cmd As New OleDbCommand("SELECT [position].* FROM [position];", conn)
Dim adapter As New OleDbDataAdapter(cmd)

也可不实例化OleDbCommand对象,直接使用传入构造函数的参数在构造函数内部(我本身的理解,不知道对不对)为SelectCommand属性赋值。如:

Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\position.accdb;Jet OLEDB:Database Password=#")
Dim adapter As New OleDbDataAdapter("SELECT [position].* FROM [position];", conn)
Dim dt As New DataTable
        adapter.Fill(dt)
        DataGridView1.DataSource = dt

甚至不实例化OleDbConnection对象也是能够的,代码愈来愈简练,以下:

Dim adapter As New OleDbDataAdapter("SELECT [position].* FROM [position];",
                                            "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\position.accdb;Jet OLEDB:Database Password=#")
       
        '填充DataTable
        Dim dt As New DataTable
        adapter.Fill(dt)
        DataGridView1.DataSource = dt

五、关闭链接

执行命令完毕后,记得使用OleDbConnection对象的Close方法关闭数据库链接。

conn.Close()