登录
首页 电脑编程
回帖 发帖
正文

主题:解决Sqlite 文件被占用的问题

点击:2624 回复:2


最近要把sqlie数据,同步到不同设备上。只需要同步部分表的数据。于是采用在线备分+删除表的方法。备份+删除表+压缩都很快就完成了。结果在传送时,却出错了。原因是有sqlite连接池,无法彻底关闭数据连接。设置关闭连接池也无济于事。在网上找了System.Data.SQLite.SQLiteConnection.ClearAllPools();测试也无效。折腾了半天。最后发现ClearAllPools之后需要稍等待片刻才可以。总结代码:
   public override void BeginProcess(Shotgun.Database.BDClass dBase)
   {
       var dB = (Shotgun.Database.SQLiteDB)dBase;
       System.IO.FileInfo dBFile = dB.BackupDataFile(); //备份数据到新文件
       try
       {
           var cs = new SQLiteConnectionStringBuilder();
           cs.DataSource = dBFile.FullName;
           using (dB = new Shotgun.Database.SQLiteDB(cs.ToString()))
           {
               RemoveTables(dB);//删除多余的表及压缩数据库
               var conn = (SQLiteConnection)((Shotgun.Database.IBaseDataClass2)dB).Connection;//取得连接串
              SQLiteConnection.ClearPool(conn);//在连接池中,关闭指定的数据文件(不影响主数据库)
           }
          GC.Collect();
          System.Threading.Thread.Sleep(10);//等待连接池关闭
           Transfer(dBFile);//传送新数据文件至客户端
       }
       finally
       {
           if (dBFile.Exists)
               dBFile.Delete();
       }
   }
14-04-09 10:04
学习了
14-04-09 10:37
这个可以有。。。
14-04-18 08:57

工控新闻

更多新闻资讯