我正在使用 Visual Studio .NET Framework 和 vb.net 编程语言,我已经努力修复我的错误大约一周了。我使用 MS Access 数据库 (.accdb) 作为我的数据库。
模块1.vb:
Imports System.Data.OleDb
Module Module1
Public cn As New OleDbConnection
Public cm As New OleDbCommand
Public dr As OleDbDataReader
Sub ConnectToDatabase()
Try
Dim startupPath As String = AppDomain.CurrentDomain.BaseDirectory
Dim connectionString As String = $"Provider=Microsoft.JET.OLEDB.4.0;Data Source={startupPath}\OSA_Records.accdb"
Using cn As New OleDbConnection(connectionString)
cn.Open()
End Using
Catch ex As Exception
Console.WriteLine("ConnectToDatabase Error: " & ex.ToString())
MsgBox(ex.Message, vbCritical)
End Try
End Sub
End Module
我也已经在“frmMain.vb”加载事件中调用了该方法 frmMain.vb:
Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ConnectToDatabase()
LoadRecordsStudent()
LoadRecordsViolation()
LoadRecordsProgram()
LoadRecordsSection()
LoadRecordsAcademicYear()
AutoSuggestStudent()
End Sub
我已经尝试了所有可能与我的问题相关的 YouTube 视频,但它仍然不起作用,我希望有人可以帮助我解决我的问题。
如果我仍然需要提供任何有助于解决我的问题的相关信息,请告诉我。非常感谢!
在你的模块中,有这一行:
Public cn As New OleDbConnection
声明一个字段,创建一个不带连接字符串的新连接对象,并将该对象分配给该字段。然后你就得到了这个代码:
Using cn As New OleDbConnection(connectionString)
cn.Open()
End Using
这实际上是声明一个不同的局部变量,使用连接字符串创建一个新的连接对象,将该对象分配给该变量,打开连接,然后再次关闭它。这些对您的字段和分配给它的连接对象都没有任何影响。
首先,如果您只是要在第二个片段中创建一个新对象,那么为什么要在第一个片段中创建一个新对象呢?不要创建您无意使用的新对象。
至于问题,事实上,当您认为您正在使用具有相同名称的字段时,您在方法中引入了局部变量。虽然您使用的架构不是很好,但我们暂时继续使用它。在这种情况下,您应该更改第一个片段以使用连接字符串创建连接对象:
Public cn As New OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;Data Source=|DataDirectory|\OSA_Records.accdb")
然后,在您的方法中,使用该字段和该对象:
Try
cn.Open()
cn.Close()
Catch
'...
End Try
请注意,在连接字符串中使用
"|DataDirectory|"
作为文件夹路径,这允许您将连接字符串放置在某处,而无需使用代码来设置数据库文件夹路径。它将解析为与 WinForms 应用程序的 Application.StartupPath
相同的值,这就是您应该在代码中使用的值。