我对access数据库操作,打开的连接有conn(OleDbConnection),dr(OleDbDataReader),adp(OleDbDataAdapter),操作完成后我都立刻关闭了连接:dr.Close()、conn.Close()、adp.Dispose();然后我需要将此数据库更名。
大部分时候都是正常的,但是当操作比较频繁的时候(关闭连接后重命名,然后又打开连接,操作后再关闭连接,再重命名,再打开……),总会在成功操作一段时间之后在关闭连接之后依然出现“.ldb”文件(是在关闭连接之后,因为access只有打开数据库操作的时候才会出现和数据库同名的.ldb文件,表明该数据库被锁定编辑,这个时候无法重命名数据库,会提示“被别的进程占用”),导致我程序继续运行失败。
为此我在各个连接关闭之后都加了Thread.Sleep(x)来休眠一段时间,期望系统来释放资源,但是仍然会出现。
请问大家有什么办法能够有效的结束对access数据库的连接,或者我该加入什么样的判断来在重命名之前判断关闭的连接依然存在而做些处理,让它真正的释放并继续运行呢?谢谢!
大部分时候都是正常的,但是当操作比较频繁的时候(关闭连接后重命名,然后又打开连接,操作后再关闭连接,再重命名,再打开……),总会在成功操作一段时间之后在关闭连接之后依然出现“.ldb”文件(是在关闭连接之后,因为access只有打开数据库操作的时候才会出现和数据库同名的.ldb文件,表明该数据库被锁定编辑,这个时候无法重命名数据库,会提示“被别的进程占用”),导致我程序继续运行失败。
为此我在各个连接关闭之后都加了Thread.Sleep(x)来休眠一段时间,期望系统来释放资源,但是仍然会出现。
请问大家有什么办法能够有效的结束对access数据库的连接,或者我该加入什么样的判断来在重命名之前判断关闭的连接依然存在而做些处理,让它真正的释放并继续运行呢?谢谢!
{
....
}
using(//定义的对象)
{//连接数据库的代码}
using(OleDbConnection conn=new OleDbConnection()
{
....
}正解!
{
....
}
using一结束后就会关闭
conn.Dispose();
具体步骤:
using Microsoft.Practices.EnterpriseLibrary.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
把这些引进来, public static ArticleColumnRelationProperty GetArticleColumnRelation(int articleId, int columnId)
{
ArticleColumnRelationProperty relation = new ArticleColumnRelationProperty();
Database db = DatabaseFactory.CreateDatabase(CmsConfiguration.Settings.ConnectionString);
DbCommand dbCommand;
dbCommand = db.GetSqlStringCommand("SELECT * FROM " + CmsConfiguration.Settings.Table.ArticleColumnRelation + " WHERE ArticleId = @ArticleId AND ColumnId = @ColumnId");
db.AddInParameter(dbCommand, "ArticleId", DbType.Int32, articleId);
db.AddInParameter(dbCommand, "ColumnId", DbType.Int32, columnId);
using (IDataReader dbReader = db.ExecuteReader(dbCommand))
{
if (dbReader.Read())
{
relation.ArticleId = (int)dbReader["ArticleId"];
relation.Column = ColumnService.FindById((int)dbReader["ColumnId"]);
relation.Order = (int)dbReader["Sequence"];
relation.TemplateId = (int)dbReader["TemplateId"];
}
} return relation;
}
USING的使用保证了在适当的时间系统会自动释放不需要的资源.
这个其实就是一种封装,把释放资源的操作也封装了,你就不需要手动释放了.
一家之言,很片面,希望能够起到抛砖引玉的效果,谢谢.
这该怎么办?