database - Visual Basic 连接到数据库

标签 database vb.net visual-studio-2010 oledb

有人可以解释一下这两个函数或者我们在 VB 连接数据库时使用的原理吗?该代码来 self 们的老师,我们的老师没有解释为什么应该这样编码。我们使用 MS Access 2003 文件作为数据库。

Imports System.Data.OleDb

Public Class Form1
    Dim dbPath As String = Application.StartupPath & "\Database\xxxx.mdb"
    Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0; DATA SOURCE = " & dbPath

    Private Function performQuery(ByRef connectionString As String, ByVal sqlCommand As String) As OleDb.OleDbDataReader
        Dim dbConnection As OleDbConnection
        Dim dbCommand As New OleDbCommand()
        Dim dbDataReader As OleDb.OleDbDataReader = Nothing
        Try
            dbConnection = New OleDbConnection(connectionString)
            dbCommand.CommandText = sqlCommand
            dbCommand.Connection = dbConnection
            dbConnection.Open()
            dbDataReader = dbCommand.ExecuteReader
            Return dbDataReader
            dbConnection.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning)
        End Try
        Return Nothing
    End Function

    Private Function performNonQuery(ByVal connectionString As String, ByVal sqlCommand As String) As Boolean
        Dim dbConnection As OleDbConnection
        Dim dbCommand As New OleDbCommand()
        Try
            dbConnection = New OleDbConnection(connectionString)
            dbCommand.CommandText = sqlCommand
            dbCommand.Connection = dbConnection
            dbCommand.Connection.Open()
            dbCommand.ExecuteNonQuery()
            dbConnection.Close()
        Catch ex As Exception
            MessageBox.Show(ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning)
            Return False
        End Try
        Return True
    End Function
End Class

最佳答案

performQuery 函数有故障。它永远不会关闭连接(Return dbDataReader 发生在连接关闭之前)。一方面 - 这是一件好事,因为如果没有打开的连接,DataReader 就没用。另一方面 - 连接作为函数内部的私有(private)变量打开,因此当函数返回时它会超出范围,并且您永远不知道垃圾收集器何时决定收集它。当这种情况发生在 Reader.Read 中时总是很有趣。

关于database - Visual Basic 连接到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18791606/

相关文章:

python - 如何获取对象数据库?

Python 或 WPF 报告应用程序

visual-studio-2010 - VS 2010 安装项目不会删除以前的版本

Javascript循环逻辑不正确

vb.net - 确定十进制扩展中的最长重复循环

c++ - 使用两个着色器程序打开两个不同的三角形

android - 无法分配 CursorWindow

database - 从 Linux shell 与 .db 文件交互

sql - 在数据库 ORM 中应该将字符串映射到什么?

asp.net - IIS 经典模式 .NET Web API 调用返回 404 错误