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

一、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数据。可与数据库离线,只在返回数据库时,才保持连接。

二、ADO.NET核心对象

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

三、ADO.NET操作ACCESS数据库的一般步骤

1、连接数据库——实例化OleDbConnection对象

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

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

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

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

可以阅读《ADO.NET操作ACCESS数据库——数据库连接字符串》一文了解如何正确书写和获取连接字符串。

2、打开连接

实例化OleDbConnection对象后可以使用其Open方法打开连接。

conn.Open()

3、下达命令(生成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。
使用无参构造函数实例化代码:

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

或:

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)

4、执行命令

(1)、OleDbCommand对象的ExecuteNonQuery方法

ExecuteNonQuery方法执行 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)
        '执行命令
        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

5、关闭连接

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

conn.Close()
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页