访问数据库的大小增加

时间:2016-02-19 08:45:33

标签: vb.net ms-access

我正在使用VB.net (4.5)Access DB (2016)中创建一个应用程序,但是有一个小问题。当我插入记录(例如,RichTextBox变为Byte())时,数据库的大小会增加。但是当我删除时,大小不会减少(它保持不变)。因此,当我插入和删除记录时,数据库正以MB为单位增长。

我发现当你重新启动电脑时,数据库已经释放了空间。问题是什么?我该如何解决这个问题?

PD:我做了所有.close()和.Dispose()应该是我的数据库访问类。

3 个答案:

答案 0 :(得分:1)

是的,这是Access的一项功能。更一般地说,几乎任何数据库系统或文件系统。

数据库扩展为保存新记录。将记录标记为已删除时,空格不会被回收或释放,直到稍后。

在我使用的Access版本中,当您关闭Access时,(可选)压缩数据库。如果您使用的是com对象或.net对象而不是MSAccess,则可以使用适当的方法来压缩数据库。

如果您的文件系统没有显示正确的文件大小,那么(1)shell的问题没有按预期更新,或者(2)您没有正确释放文件。< / p>

删除后的数据库大小是一个常见问题。另请参阅Wouldn't MS Access(.mdb) file size reduce after deleting the content of database?

答案 1 :(得分:0)

您是否根据https://msdn.microsoft.com/en-us/library/bb208950.aspx

提交数据库

COMMIT [TRANSACTION | WORK]

可以使用

答案 2 :(得分:0)

我没有使用交易。 但是,我不确定这是否有任何关系,因为当我重新启动电脑时,数据库正常。

Public Function ejecutarUpdate(ByVal query As String, ByVal devolverId As Boolean, ByRef id As Integer) As Integer
    Dim numRegistros As Integer = 0

    Try
        conexion = New OleDbConnection(cadenaConexion)
        conexion.Open()
        comando = New OleDbCommand(query, conexion)
        numRegistros = comando.ExecuteNonQuery()

        If devolverId Then
            comando.CommandText = "Select @@Identity"
            id = CInt(comando.ExecuteScalar())
        End If
    Catch oleDbException As OleDbException
        If oleDbException.Errors(0).SQLState = "3022" Then
            Throw New Exception(COD_ERROR_PK_UK) ' Restricción de PK/UK
        Else
            Throw oleDbException
        End If
    Catch exception As Exception
        Throw exception
    Finally
        liberarDB()
    End Try

    Return numRegistros
End Function

Private Sub liberarDB()
    If conexion IsNot Nothing AndAlso conexion.State = ConnectionState.Open Then
        conexion.Close()
        conexion.Dispose()
        conexion = Nothing
    End If

    If comando IsNot Nothing Then
        comando.Dispose()
        comando = Nothing
    End If

    If adaptador IsNot Nothing Then
        adaptador.Dispose()
        adaptador = Nothing
    End If
End Sub