Ado.net基于XML和离线计算模型。
ADO.net的两个核心组件:.Net数据提供程序、DataSet。
.net数据提供程序用来与数据库的链接,如SQLServer.net数据提供程序——System.Data.SqlClient, 访问SQl2000或以上版本;OleDb.net数据提供程序——System.Data.OleDb,主要访问Access。
DataSet用来与XML数据链接。设计的目的是独立于任何数据源的数据访问,可有多种不一样数据,也可用于XML数据。可与数据库离线,只在返回数据库时,才保持链接。web
一、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对象负责存取和更新数据。数据库
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()
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。
使用无参构造函数实例化代码:.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)
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语句修改成SELECT [position].* FROM [position]后正常执行命令,估计表名position为系统关键字,因此须要用[]括起。
返回一个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()
执行查询后,返回由查询返回的结果集中的第一行的第一列。 其余列或行将被忽略。也就是说只返回一个值。
测试代码:
'链接数据库 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()
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 '填充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()