vb.net - 从 Access 文件到 DataTable 的数据检索不起作用
问题描述
我有一些代码可以将数据库与程序连接起来,但由于某种原因,在运行时它没有显示来自数据库的数据。
Public Class Form2
Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\employee\employee.accdb")
Dim cmd As New OleDbCommand("", con)
Dim empDA As New OleDbDataAdapter
Dim empTable As New DataTable
Dim dr As OleDbDataReader
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.EmpTableAdapter.Fill(Me.EmpDataSet.emp)
Dim cmd As New OleDbCommand("select * from emp", con)
empDA = New OleDbDataAdapter("select * from emp", con)
empDA.Fill(empTable)
DataGridView1.DataSource = empDA
End Sub
解决方案
问题中的代码对于需要做什么似乎有点混乱。
变量应该限制在需要它们的最小范围内,并且有些东西需要在使用后处理掉(以避免内存泄漏、文件保持锁定以及其他计算机资源问题)。
对于处置,该Using
语句很有用,因为它确保自动完成。
您应该尝试将每段逻辑代码放在适当的小方法中,以便更容易使用。也许是这样的:
Imports System.Data.OleDb
Public Class Form2
Dim connStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\temp\employee.accdb"
Sub ShowEmployeeData()
Dim sql = "SELECT [Id], [FirstName] FROM [Employees] ORDER BY [Id]"
Using conn As New OleDbConnection(connStr)
Using cmd As New OleDbCommand(sql, conn)
Dim employees As New DataTable()
Dim da As New OleDbDataAdapter(cmd)
da.Fill(employees)
DataGridView1.DataSource = employees
End Using
End Using
End Sub
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ShowEmployeeData()
End Sub
End Class
所以这个connStr
变量在类中的任何地方都可用Form2
,并且显示员工数据的代码在它自己的 Sub 中。
查询数据库时,您应该指定您需要的实际列,以便以您想要的顺序返回列,并按其中一个列排序,以便以可预测的顺序返回数据 - 数据库可以自由给出如果您不告诉他们,您可以订购任何东西。
推荐阅读
- file - 使用 vscode 扩展 api 读取和写入数据到 .txt 文件
- apache-spark - 如何集成 Spark、Livy 和 Nifi 从 jar 执行 spark 代码
- ios - Firebase 云消息传递令牌错误,但令牌是最新的
- javascript - 在浏览器的 URL 栏中重复一段 JavaScript 代码
- github - 进行上下文 github 检查以通过
- python - 从列表中删除所有可重复的值以及其他值中的值,Python
- jquery - 在 ASP.NET Core 控制器中传递多个 POST 参数
- java - 在接受多个输入时,使用扫描仪类在 Java 中遇到问题
- python - Django 按名称查询 content_type 而不是 content_type_id
- r - 如何取消列出字符串列以计算匹配项?