失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > VB.NET学习笔记:ADO.NET操作ACCESS数据库——ADO.NET数据访问接口

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

时间:2018-10-18 14:08:01

相关推荐

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

一、概述

基于XML和离线计算模型。

的两个核心组件:.Net数据提供程序、DataSet。

.net数据提供程序用来与数据库的连接,如数据提供程序——System.Data.SqlClient, 访问SQl2000或以上版本;数据提供程序——System.Data.OleDb,主要访问Access。

DataSet用来与XML数据连接。设计的目的是独立于任何数据源的数据访问,可有多种不同数据,也可用于XML数据。可与数据库离线,只在返回数据库时,才保持连接。

二、核心对象

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对象负责存取和更新数据。

三、操作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=#")

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

2、打开连接

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

conn.Open()

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

OleDbCommand对象有4个构造函数:

实例化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()mandText = "SELECT position.* FROM [position];"mandTimeout = 30 '默认值为30,所以此句可以省略mandType = 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语句修改为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 DataTabledt.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对象(无参数构造函数除外)时必须指定其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'填充DataTableDim dt As New DataTableadapter.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 DataTableadapter.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=#")'填充DataTableDim dt As New DataTableadapter.Fill(dt)DataGridView1.DataSource = dt

5、关闭连接

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

conn.Close()

如果觉得《VB.NET学习笔记:ADO.NET操作ACCESS数据库——ADO.NET数据访问接口》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。