DataAdapter与数据源提供程序相关,操作ACCESS数据库数据提供程序为OleDb.net,命名空间为System.Data.OleDb,相应的DataAdapter对象在System.Data.OleDb空间里对应的是OleDbDataAdapter对象。
而DataTable对象和DataSet对象同属于System.Data命名空间,可见其与数据源无关。DataTable对象可作为DataSet对象中的表,也可以单独作为数据集。下图为ADO.NET 体系结构。
使用OleDbDataAdapter对象的Fill方法可从数据源检索数据并填充 DataSet 中的表,实例化OleDbDataAdapter对象时必须设置其SelectCommand属性。 使用OleDbDataAdapter对象的Update方法还可将对 DataSet 所做的更改解析回数据源,实例化OleDbDataAdapter对象时必须设置InsertCommand、 UpdateCommand或 DeleteCommand属性。
一、OleDbDataAdapter对象填充数据集并将更改保存到数据库
以下示例代码演示使用OleDbDataAdapter对象填充数据集,修改数据集中的表数据,然后将修改过的数据更新到数据库。
Imports System.Data.OleDb
Public Class Form2
Private Const strconn As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\test.accdb"
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'连接数据库
Dim conn As New OleDbConnection(strconn)
'打开数据库
conn.Open()
'实例化OleDbDataAdapter
Dim adapter As New OleDbDataAdapter("SELECT stutbl.* FROM stutbl", conn)
'实例化DataSet
Dim dst As New DataSet("mydst")
'添加表
dst.Tables.Add("mytbl")
'填充数据到DataSet
adapter.Fill(dst, "mytbl")
'窗口显示数据
DataGridView1.DataSource = dst.Tables("mytbl")
'操作数据表DataTable
With dst.Tables("mytbl")
'插入行
Dim newrow As DataRow = .NewRow()
newrow("stuname") = "李四"
newrow("sex") = "男"
newrow(3) = "二年级"
.Rows.Add(newrow)
'更新行
.Rows(2)("stuname") = "王二"
'删除行
.Rows(.Rows.Count - 2).Delete()
End With
'添加insert命令参数
Dim insertcmd As New OleDbCommand("Insert INTO stutbl(sex,stuname,grade) VALUES (?,?,?)", conn)
insertcmd.Parameters.Add("@sex", OleDbType.VarChar, 1, "sex")
insertcmd.Parameters.Add("@stuname", OleDbType.VarChar, 10, "stuname")
insertcmd.Parameters.Add("@grade", OleDbType.VarChar, 10, "grade")
adapter.InsertCommand = insertcmd
'添加update命令参数
Dim updatecmd As New OleDbCommand("Update stutbl set sex=?,stuname=?,grade=? Where ID=?", conn)
updatecmd.Parameters.Add("@sex", OleDb