是否有必要使用使用Dispose连接,如果在MS Access数据库中使用DbContext dapper,则打开和关闭连接 vb.net

is it necessary to use using Dispose the connection , open and close connection if using DbContext dapper in MS access database on vb.net

提问人:roy 提问时间:5/22/2023 更新时间:5/23/2023 访问量:70

问:

如果在 vb.net 上的 MS access 数据库中使用 DbContext dapper,是否有必要使用处置连接、打开和关闭连接。

这是我第一次使用 dapper,请指导我,以便在执行 crud 时没有错误,并在 oledb 数据库访问中有效地使用 Dapper。 而且我担心在实现我的代码时有错误。

谢谢

'model
Public Class User
        Public Property Id() As Integer
        Public Property Name() As String
        Public Property Email() As String
        Public Property Password() As String
    End Class

'Database
  Public Module DbContext
        Public Function GetOledbConnectionString() As String
            Return "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\dapperdemo.accdb;Persist Security Info=False;"
        End Function
    End Module

 Public Class UserService
        Private ReadOnly _conn As OleDbConnection
        Private _connectionString As String = DbContext.GetOledbConnectionString()
        Public Sub New()
            _conn = New OleDbConnection(_connectionString)
        End Sub
        Public Function GetUser() As IEnumerable(Of User)
            Dim sql = "SELECT * FROM Users"
            Dim result = Me._conn.Query(Of User)(sql).ToList()
            Return result
        End Function
        Public Sub InserUser(ByVal user As User)
            Dim sql = $"INSERT INTO `users` (`Name`, `Email`, `Password`) VALUES ('{user.Name}', '{user.Email}', '{user.Password}');"
            Me._conn.Execute(sql)
        End Sub
'form load in datagridview
 Partial Public Class Pguser
        Inherits UserControl
        Private uService As New Database.UserService()
        Public Sub New()
            If Program.IsInDesignMode(Me) Then
                Return
            End If
            InitializeComponent()
            LoadData()
        End Sub
        Private Sub LoadData()
            Dim user = uService.GetUser()
            grid.DataSource = user
        End Sub
    End Class
vb.net ms-access dapper oledbconnection using-statement

评论

3赞 Craig 5/22/2023
任何实现的东西都应该被处理掉。IDisposable

答:

1赞 djv 5/23/2023 #1

关于您的请求

请指导我...在oledb数据库访问中高效使用Dapper

正确使用实现 IDisposable 的对象应该在您提到效率之前出现。有关 Dapper 的更多信息,请参阅此答案。似乎 Dapper 会为您打开(和关闭)连接,但既然您正在打开,您不妨同时执行这两个操作。

Public Class UserService
    Public Function GetUser() As IEnumerable(Of User)
        Using _conn = New OleDbConnection(DbContext.GetOledbConnectionString())
            Return _conn.Query(Of User)("SELECT * FROM Users").ToList()
        End Using
    End Function
    Public Sub InserUser(ByVal user As User)
        Using _conn = New OleDbConnection(DbContext.GetOledbConnectionString())
            _conn.Execute($"INSERT INTO `users` (`Name`, `Email`, `Password`) VALUES ('{user.Name}', '{user.Email}', '{user.Password}');")
        End Using
    End Sub
End Class

Try ... Finally

Public Function GetUser() As IEnumerable(Of User)
    Dim _conn = New OleDbConnection(DbContext.GetOledbConnectionString())
    Try
        Return _conn.Query(Of User)("SELECT * FROM Users").ToList()
    Finally
        _conn?.Dispose()
    End Try
End Function

你可以用 a 显式关闭,但语法要简洁得多。Try ... FinallyUsing

还可以查看实体框架以摆脱文本命令。

评论

0赞 roy 5/23/2023
谢谢你的回答。如果我想使用 Try...最后应该在我的代码中的位置使用
1赞 roy 5/26/2023
感谢您的回答,如果我回复晚了,很抱歉