解决方案

VB.NET 使用 OleDb 操作 Access 数据库(来自 MSDN)

seo靠我 2023-09-24 00:22:35

VB.NET 使用 OleDb 操作 Access 数据库

这里采用 OleDb 方式对 Access 数据库进行访问,主要内容都来自 MSDN 帮助文档。建议新手注意 MSDN 的用途。下面的代码只是SEO靠我示例,请自行组织代码结构。

首先引用 

导入命名空间 :Imports System.Data.OleDb

然后我们要用到以下几个类,OleDbConnection,OleDbDataAdapter,  OlSEO靠我eDbCommand , OleDbCommandBuilder。详细用法请参照 MSDN

现在定义以下全局变量:

定义相关变量 到数据源的连接。并实例化Public odConnection As OlSEO靠我eDbConnection = New OleDbConnection() 存储读取当前数据表的sql语句,写入数据库时必须使用Public sql_select As String = "SelecSEO靠我t * From " 连接字符串前面一部分,不包括文件名Public cnnStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data sourceSEO靠我="Public openFileDialog As OpenFileDialog = New OpenFileDialog()

主测试函数,需要一个 ComboBox1 和 DataGridView1SEO靠我。Private Sub TestMain() 弹出选择文件对话框选择数据库文件With openFileDialog.Title = "Open DB File".Filter = "AaccessSEO靠我07-10 Database|*.accdb|Access97-03 Database|*.mdb|All Files|*.*".FileName = vbNullString.ShowDialog(SEO靠我)End WithTry 由数据库文件名连接数据库,并打开连接If odConnection Is Nothing ThenodConnection = New OleDbConnection(cnnSEO靠我Str + openFileDialog.FileName)End IfodConnection.ConnectionString = cnnStr + openFileDialog.FileNameSEO靠我odConnection.Open()Catch ex As ExceptionodConnection = NothingMsgBox(ex.Message)End TryDim sql As StSEO靠我ring = "Select * From "Dim tns As List(Of String) 获得表名列表Dim num As Integer = GetTableNames(tns, odCoSEO靠我nnection) 将表名列表添加到 ComboBox ComboBox1.Items.Clear()ComboBox1.Items.AddRange(tns.ToArray) 根据表名列表的第一个表SEO靠我名获取数据表数据,显示在 DataGridView 中sql += tns.Item(0) 存储该 sql 语句到 sql_select 读取其他表时,须更新该语句sql_select = sql 绑SEO靠我定结果 DataTable 到 DataGridViewDataGridView1.DataSource = ReadDataFromDB(sql_select, odConnection)End SSEO靠我ub 根据 odConnection 获得数据库中表的个数及各个表名(按顺序) 各个表名存储在输入的参数 tableNames 中,表的个数作为返回值 输入参数 tableNaSEO靠我mes 可以为空,可将其 显示在 ComboBox 中。Function GetTableNames(ByRef tableNames As List(Of String), ByVal odConnSEO靠我ection As OleDbConnection) As IntegerIf tableNames Is Nothing ThentableNames = New List(Of String)EnSEO靠我d IftableNames.Clear()If odConnection Is Nothing ThenMsgBox("数据库未连接")Return 0End If 获取数据库中数据表的名称及个数 SEO靠我Type 有:"TABLE,VIEW,ACCESS TABLE,SYSTEM TABLE", Dim dt As DataTableDim tableNum As IntegerDim i As InSEO靠我tegerTrydt = odConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, _New Object() {Nothing, NothinSEO靠我g, Nothing, "TABLE"})Catch ex As ExceptionMsgBox(ex.Message)Return 0End TrytableNum = dt.Rows.CountISEO靠我f tableNum = 0 ThentableNames.Clear()Return 0End IfFor i = 0 To tableNum - 1tableNames.Add(dt.Rows(iSEO靠我).Item("TABLE_NAME"))NextReturn tableNumEnd Function

根据表名将数据表数据读取到 DataTable 并返回 sql 为当前表读取时的 Select SEO靠我语句 odConnection 为当前数据库的连接 Private Function ReadDataFromDB(ByVal sql As String, ByVal odConnection AsSEO靠我 OleDbConnection) As DataTableIf (Sql Is Nothing Or Sql Is vbNullString Or odConnection Is Nothing) SEO靠我ThenReturn NothingEnd IfDim dt As DataTable = New DataTableTryDim odAdapter As OleDbDataAdapter = NeSEO靠我w OleDbDataAdapter(Sql, odConnection) 填充数据到 DataTableodAdapter.Fill(dt)Catch ex As ExceptionMsgBox(eSEO靠我x.Message)Return NothingEnd TryReturn dtEnd Function

当在 DataGridView 更改数据时,将更改写入数据库 sql 为当前表读取时的 SeleSEO靠我ct 语句 odConnection 为当前数据库的连接Private Function WriteDataToDB(ByVal sql As String, ByVal odConnection ASEO靠我s OleDbConnection) As IntegerIf (sql Is Nothing Or sql Is vbNullString Or odConnection Is Nothing) TSEO靠我henReturn NothingEnd IfDim num As IntegerTry odAdapter 数据命令和一个数据库连接,于填充 DataSet 和更新数据源Dim odAdapter SEO靠我As OleDbDataAdapter = New OleDbDataAdapter(sql, odConnection) odCmdBuilder 自动生成用于协调对 DataSet 的更改与关联数SEO靠我据库的单表命令Dim odCmdBuilder As OleDb.OleDbCommandBuilder = New OleDb.OleDbCommandBuilder(odAdapter)odCmdSEO靠我Builder.QuotePrefix = "["odCmdBuilder.QuoteSuffix = "]" 获取在数据源中执行插入操作所需的自动生成的 OleDbCommand 对象odCmdBuSEO靠我ilder.GetInsertCommand() 获取在数据源中执行删除操作所需的自动生成的 OleDbCommand 对象odCmdBuilder.GetDeleteCommand() 获取在数据源SEO靠我中执行更新操作所需的自动生成的 OleDbCommand 对象odCmdBuilder.GetUpdateCommand()num = odAdapter.Update(DataGridView1.DSEO靠我ataSource) 就保存更改,在实质上是把网格中的数据回发给数据库 Return numCatch ex As ExceptionMsgBox(ex.Message)Return 0End TrySEO靠我End Function

可在 ComboBox 的 SelectedIndexChanged 消息函数中更改 DataGridView 的显示不同的表Private Sub ComboBox1_SelSEO靠我ectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SeleSEO靠我ctedIndexChangedDim sql As String = "Select * From " + ComboBox1.TextDataGridView1.DataSource = ReadSEO靠我DataFromDB(sql, odConnection)End Sub

“SEO靠我”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与 我们联系删除或处理,客服邮箱:html5sh@163.com,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同 其观点或证实其内容的真实性。

网站备案号:浙ICP备17034767号-2