您现在所在的是:

电脑编程

回帖:2个,阅读:2569 [上一页] [1] [下一页]
8164
shotgun
文章数:1453
年度积分:50
历史总积分:8164
注册时间:2007/9/19
发站内信
发表于:2014/4/9 10:04:03
#0楼

最近要把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();
       }
   }
此帖来自中华工控网工控博客
原文件地址:http://blog.gkong.com/more.asp?id=191870&Name=shotgun
22143
weixiu123
文章数:13227
年度积分:1502
历史总积分:22143
注册时间:2014/1/18
发站内信
发表于:2014/4/9 10:37:32
#1楼
学习了
561
416102805
文章数:4
年度积分:50
历史总积分:561
注册时间:2014/4/17
发站内信
发表于:2014/4/18 8:57:26
#2楼
这个可以有。。。

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

46.8003