作者:潘昀湖5159 | 来源:互联网 | 2023-02-09 10:37
写数据到数据库时,为什么ACCESS数据库文件会变这么大?我是每次都删除表里的数据,再插入新的数据,最大的表里也就一万多行,可是每次操作,数据库文件都会增加好几M,甚至十几兆,我用的是ACCESS2
写数据到数据库时,为什么ACCESS数据库文件会变这么大?我是每次都删除表里的数据,再插入新的数据,最大的表里也就一万多行,可是每次操作,数据库文件都会增加好几M,甚至十几兆,我用的是ACCESS 2000,下面是代码,请教各位老师:
//写数据到数据库
System.Data.OleDb.OleDbConnection sqlcOnn=new System.Data.OleDb.OleDbConnection(DBControl.connstr);
System.Data.OleDb.OleDbCommand sqlcmd=new System.Data.OleDb.OleDbCommand();
sqlcmd.Connection =sqlconn;
sqlconn.Open();
//清除表内容
strSql="delete from "+strCodeVer[k].ToString();
sqlcmd.CommandText =strSql;
sqlcmd.ExecuteNonQuery();
//插入数据
for (int m=0;m
strSql="insert into "+strCodeVer[k].ToString()+" values("+codeList[k][m].ToString()+")";
sqlcmd.CommandText =strSql;
sqlcmd.ExecuteNonQuery();
}
sqlcmd.Dispose();
sqlconn.Close();
刚刚听说每次操作完都要压缩数据库文件(创建临时文件名 ,压缩数据库文件 ,删除原来的数据库文件 ,拷贝刚刚压缩过临时数据库文件至原来位置 ),请问还有别的办法吗?因为我的数据库文件可能正在被别的进程访问,不能删除,各位大哥,多谢指导哦
10 个解决方案
数据库日志记录了你的插入和删除信息 同时自动增长字段也变化了
压缩数据库
先引用COM Microsoft Jet and Replication Objects X.X library
string strS="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\my.mdb;";//需要被压缩的文件
string strT="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\my_2.mdb;";//压缩后生成的新文件
JRO.JetEngine jet=new JRO.JetEngineClass();
jet.CompactDatabase(strS,strT);
需要设置退出时自动压缩,步骤如下:
菜单 -> 工具 -> 选项 -> 常规关闭时压缩 -> 前面打上勾
haike(小虾米) :程序里不能压缩数据库,因为数据库文件正在被其它的进程使用
sfanpu(Erick Shuai) :不行,因为我更本就没有打开access文件,是程序访问
还有其它的办法吗?
手工去压缩你的ACCESS数据库~~~~
要是不允许压缩,就的先关你的程序~~~~再压缩!
access就是这样,每次添了再删除,删除后再添都会空间变大.
我的数据库只有几M, 所以我每次都是手工压缩.帮你up
这有一个资料,不过也是以独占的方式压缩资料的。:(
==================================================================
源自 AccessXP 帮助:
CompactRepair 方法
请参阅 应用于 示例 特性
压缩和修复指定的数据库 (.mdb) 或 Microsoft Access 项目 (.adp) 文件。返回 Boolean 型值;如果处理成功,返回 True。
expression.CompactRepair(SourceFile, DestinationFile, LogFile)
expression 必需。返回“Applies To”列表中的一个对象的表达式。
SourceFile String 型,必需。代表要压缩和修复的数据库或项目文件的完整路径和文件名。
DestinationFile String 型,必需。完整的路径和文件名,代表所返回文件的保存位置。
LogFile Boolean 型,可选。如果在目标目录中创建一个日志文件用于记录在源文件中检测到的损坏,则为 True。只有在源文件中检测到损坏时,才创建日志文件。如果 LogFile 为 False 或省略,就不创建日志文件,即使在源文件中检测到损坏也是如此。
说明
源文件不可以是当前数据库,也不能被其他用户打开,因为调用该方法将会以独占方式打开源文件。
示例
下面的示例将压缩和修复一个数据库,如果在源文件中检测到损坏,则会创建一个日志文件,并根据恢复是否成功而返回一个 Boolean 值。为使该示例运行,必须将源文件和目标文件的路径和文件名传给它。
Function RepairDatabase(strSource As String, _
strDestination As String) As Boolean
' Input values: the paths and file names of
' the source and destination files.
' Trap for errors.
On Error GoTo error_handler
' Compact and repair the database. Use the return value of
' the CompactRepair method to determine if the file was
' successfully compacted.
RepairDatabase = _
Application.CompactRepair( _
LogFile:=True, _
SourceFile:=strSource, _
DestinationFile:=strDestination)
' Reset the error trap and exit the function.
On Error GoTo 0
Exit Function
' Return False if an error occurs.
error_handler:
RepairDatabase = False
End Function