子程序连接到MS Access数据库
问题描述:
我有这个子程序设置连接到MS Access数据库:子程序连接到MS Access数据库
Public Sub MakeDBConnection(ByVal source As String)
Try
cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & source & ";")
cn.Open()
Catch e As Exception
ReportError("CRITICAL", e.Message)
End Try
End Sub
这是一个模块,并使用它,它的工作原理与模块中的任何功能,但,当我尝试从Main.vb
(我的主窗体)尝试并使用它时,它似乎没有做任何事情,因为任何执行SQL查询的尝试都返回错误,说我必须初始化连接。
我曾尝试设置它用于Public的所有变量,但它不起作用。也许我需要回报一些东西?我不知道。
任何帮助表示赞赏,谢谢。
答
问题是,变量cn的作用域是Sub的本地作用域。您应该将其更改为一个函数并返回一个OleDbConnection对象。因此,代码是这样的:
Public Function MakeDBConnection(ByVal source As String) As OleDbConnection
Try
Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & source & ";")
cn.Open()
Return cn
Catch e As Exception
ReportError("CRITICAL", e.Message)
End Try
End Function
调用的代码应该是这样的:
' For example:
myOleDbCommand.Connection = MakeDBConnection(source)
还考虑从数据源app.config文件读取MakeDBConnection功能,如果适合你的架构。
CN定义在哪里?如果它是一个全局变量,这是一个非常糟糕的方法,它会请求连接到您的数据库打开。 – JohnFx 2010-01-26 22:24:32
但Jet更喜欢重复使用单个连接,特别是因为打开连接时创建LDB文件的开销很大。当然,这不是没有理由不仔细管理你的连接,但使用单个持久连接实际上是Jet的性能增强器,并且是一个完全有效的实践。 – 2010-01-27 03:12:49