windows-mobile – 存在文件共享冲突. SQL Server CE 3.5 SP2
我在使用SQL Server CE 3.5 SP2数据库的.NET CF应用程序中得到了这个随机问题.
当CF应用程序启动时,它执行数据库维护以验证.SDF数据库文件以使用SQL Server CE Engine类进行检查: using (SqlCeEngine engine = new SqlCeEngine(Resources.SqlCeConnectionString)) { Log.Info("Starting database Verification."); if (!engine.Verify()) { Log.Warn("Database failed verification."); engine.Repair(null,RepairOption.RecoverAllOrFail); Log.Info("Database successfully repaired."); } else { Log.Info("Database Verification successful."); } } 如果应用程序已正确验证,则我将.SDF复制到备份文件夹中: if (File.Exists(Resources.DatabaseFileLocation)) { File.Delete(Resources.BackupDatabaseFileLocation); File.Copy(Resources.DatabaseFileLocation,Resources.BackupDatabaseFileLocation); Log.Info("Database backup complete."); } else { Log.Info("Could not find Device Database."); } 备份完成后,应用程序启动,应用程序尝试对.SDF进行的第一次连接导致此异常: There is a file sharing violation. A different process might be using the file. 这是日志文件信息: 2013-05-13 11:52:29,894 [INFO ] - Starting database Verification. 2013-05-13 11:52:33,832 [INFO ] - Database Verification successful. 2013-05-13 11:52:33,838 [INFO ] - Database backup starting. 2013-05-13 11:52:46,941 [INFO ] - Database backup complete. 2013-05-13 11:52:47,933 [ERROR] - There is a file sharing violation. A different process might be using the file. [ Program FilesApplicationNameDB.sdf ] at System.Data.SqlServerCe.SqlCeConnection.ProcessResults(Int32 hr) at System.Data.SqlServerCe.SqlCeConnection.Open(Boolean silent) at System.Data.SqlServerCe.SqlCeConnection.Open() at CFApp.MainScreen.GetStartupData() at CFApp.MainScreen..ctor() at CFApp.Program.RunInReleaseMode() at CFApp.Program.Main() 几周以来我一直在研究这个问题的原因,我找不到任何东西.任何指导或帮助将非常感谢. 根据我迄今为止的努力,我可以确认这些事情 >问题是随机发生的.启动过程执行多次,然后它将随机抛出此错误 private void Dispose(bool disposing) { if (!disposing) return; this.connStr = (string) null; this.connTokens = (Hashtable) null; NativeMethods.DllRelease(); this.isDisposed = true; } >更新 – 我尝试运行此测试,以查看是否可以重现错误,我什么也没想到.代码正确执行,没有任何文件共享问题. for (int i = 0; i < 50; i++) { using (SqlCeEngine engine = new SqlCeEngine(Resources.SqlCeConnectionString)) { //Log.Info("Starting database Verification."); if (!engine.Verify()) { Log.Warn("Database failed verification."); engine.Repair(null,RepairOption.RecoverAllOrFail); Log.Info("Database successfully repaired."); } else { Log.Info("Verified" + i); } } if (File.Exists(Resources.BackupDatabaseFileLocation)) { File.Delete(Resources.BackupDatabaseFileLocation); } File.Copy(Resources.DatabaseFileLocation,Resources.BackupDatabaseFileLocation); Log.Info("File Copied " + i); GetStartupData(); } 非常感谢您提供的任何信息. 解决方法
我发现并非所有类都像他们应该的那样实现IDisposable.例如,Microsoft的OLE JET数据库引擎在从using语句调用时不会关闭数据库连接.
你可能在这里遇到这些问题. 作为开始,我建议在你的连接上显式调用Close().如果这不能解决问题,您可以添加对Dispose()的显式调用. 也可能是垃圾收集器(GC)在您的应用程序再次尝试访问它之前没有机会处理所有IDisposable代码. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Windows Phone开发使用wpf?
- windows平台 pypi打包分发 2019
- Windows Defender Antivirus从C#扫描[AccessViolation exce
- 在Windows中将带有星号的多个文件传递给python shell
- windows-server-2008-r2 – 使用WSUS的Windows Server 2008
- Microsoft BizSpark / Empower的经验[已关闭]
- windows-server-2008 – 如果对的大小相同,在raid 10中,对可
- windows – DHCP客户端认为什么是“最佳”答案?
- windows – makecert错误:无法访问主题的键
- 图像填充按钮UWP Xaml