VB.NET 使用 OleDb 操作 Access 数据库
这里采用 OleDb 方式对 Access 数据库进行访问,主要内容都来自 MSDN 帮助文档。建议新手注意 MSDN 的用途。下面的代码只是示例,请自行组织代码结构。
首先引用
导入命名空间 :Imports System.Data.OleDb
然后我们要用到以下几个类,OleDbConnection,OleDbDataAdapter, OleDbCommand , OleDbCommandBuilder。详细用法请参照 MSDN
现在定义以下全局变量:
' 定义相关变量
' 到数据源的连接。并实例化
Public odConnection As OleDbConnection = New OleDbConnection()
' 存储读取当前数据表的sql语句,写入数据库时必须使用
Public sql_select As String = "Select * From "
' 连接字符串前面一部分,不包括文件名
Public cnnStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data source="
Public openFileDialog As OpenFileDialog = New OpenFileDialog() ' 主测试函数,需要一个 ComboBox1 和 DataGridView1。
Private Sub TestMain()
' 弹出选择文件对话框选择数据库文件
With openFileDialog
.Title = "Open DB File"
.Filter = "Aaccess07-10 Database|*.accdb|Access97-03 Database|*.mdb|All Files|*.*"
.FileName = vbNullString
.ShowDialog()
End With
Try
' 由数据库文件名连接数据库,并打开连接
If odConnection Is Nothing Then
odConnection = New OleDbConnection(cnnStr + openFileDialog.FileName)
End If
odConnection.ConnectionString = cnnStr + openFileDialog.FileName
odConnection.Open()
Catch ex As Exception
odConnection = Nothing
MsgBox(ex.Message)
End Try
Dim sql As String = "Select * From "
Dim tns As List(Of String)
' 获得表名列表
Dim num As Integer = GetTableNames(tns, odConnection)
' 将表名列表添加到 ComboBox
ComboBox1.Items.Clear()
ComboBox1.Items.AddRange(tns.ToArray)
' 根据表名列表的第一个表名获取数据表数据,显示在 DataGridView 中
sql += tns.Item(0)
' 存储该 sql 语句到 sql_select 读取其他表时,须更新该语句
sql_select = sql
' 绑定结果 DataTable 到 DataGridView
DataGridView1.DataSource = ReadDataFromDB(sql_select, odConnection)
End Sub ' 根据 odConnection 获得数据库中表的个数及各个表名(按顺序)
' 各个表名存储在输入的参数 tableNames 中,表的个数作为返回值
' 输入参数 tableNames 可以为空,可将其 显示在 ComboBox 中。
Function GetTableNames(ByRef tableNames As List(Of String), ByVal odConnection As OleDbConnection) As Integer
If tableNames Is Nothing Then
tableNames = New List(Of String)
End If
tableNames.Clear()
If odConnection Is Nothing Then
MsgBox("数据库未连接")
Return 0
End If
' 获取数据库中数据表的名称及个数
' Type 有:"TABLE,VIEW,ACCESS TABLE,SYSTEM TABLE",
Dim dt As DataTable
Dim tableNum As Integer
Dim i As Integer
Try
dt = odConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _
New Object() {Nothing, Nothing, Nothing, "TABLE"})
Catch ex As Exception
MsgBox(ex.Message)
Return 0
End Try
tableNum = dt.Rows.Count
If tableNum = 0 Then
tableNames.Clear()
Return 0
End If
For i = 0 To tableNum - 1
tableNames.Add(dt.Rows(i).Item("TABLE_NAME"))
Next
Return tableNum
End Function
' 根据表名将数据表数据读取到 DataTable 并返回
' sql 为当前表读取时的 Select 语句
' odConnection 为当前数据库的连接
Private Function ReadDataFromDB(ByVal sql As String, ByVal odConnection As OleDbConnection) As DataTable
If (Sql Is Nothing Or Sql Is vbNullString Or odConnection Is Nothing) Then
Return Nothing
End If
Dim dt As DataTable = New DataTable
Try
Dim odAdapter As OleDbDataAdapter = New OleDbDataAdapter(Sql, odConnection)
' 填充数据到 DataTable
odAdapter.Fill(dt)
Catch ex As Exception
MsgBox(ex.Message)
Return Nothing
End Try
Return dt
End Function
' 当在 DataGridView 更改数据时,将更改写入数据库
' sql 为当前表读取时的 Select 语句
' odConnection 为当前数据库的连接
Private Function WriteDataToDB(ByVal sql As String, ByVal odConnection As OleDbConnection) As Integer
If (sql Is Nothing Or sql Is vbNullString Or odConnection Is Nothing) Then
Return Nothing
End If
Dim num As Integer
Try
' odAdapter 数据命令和一个数据库连接,于填充 DataSet 和更新数据源
Dim odAdapter As OleDbDataAdapter = New OleDbDataAdapter(sql, odConnection)
' odCmdBuilder 自动生成用于协调对 DataSet 的更改与关联数据库的单表命令
Dim odCmdBuilder As OleDb.OleDbCommandBuilder = New OleDb.OleDbCommandBuilder(odAdapter)
odCmdBuilder.QuotePrefix = "["
odCmdBuilder.QuoteSuffix = "]"
' 获取在数据源中执行插入操作所需的自动生成的 OleDbCommand 对象
odCmdBuilder.GetInsertCommand()
' 获取在数据源中执行删除操作所需的自动生成的 OleDbCommand 对象
odCmdBuilder.GetDeleteCommand()
' 获取在数据源中执行更新操作所需的自动生成的 OleDbCommand 对象
odCmdBuilder.GetUpdateCommand()
num = odAdapter.Update(DataGridView1.DataSource) ' 就保存更改,在实质上是把网格中的数据回发给数据库
Return num
Catch ex As Exception
MsgBox(ex.Message)
Return 0
End Try
End Function
' 可在 ComboBox 的 SelectedIndexChanged 消息函数中更改 DataGridView 的显示不同的表
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Dim sql As String = "Select * From " + ComboBox1.Text
DataGridView1.DataSource = ReadDataFromDB(sql, odConnection)
End Sub
VB.NET使用OleDb操作Access数据库教程
这篇博客介绍了如何利用VB.NET通过OleDb连接和操作Access数据库,内容基于MSDN的帮助文档。文章强调了新手学习MSDN的重要性,并提供了一个简单的代码示例,涉及OleDbConnection、OleDbDataAdapter、OleDbCommand和OleDbCommandBuilder等类的使用。
2万+





