在我们的应用程序中间歇性地,我们遇到从SQL CE抛出的LockTimeoutExceptions。我们最近升级到3.5 SP 1,其中一些似乎已经消失,但我们偶尔也会看到它们。我确定这是我们的代码中的一个错误(它是多线程的)但我无法准确地将它固定下来。有没有人有任何好的技术来调试这个问题?像这样的异常日志(这些异常永远不会有堆栈跟踪):
SQL Server Compact超时等待锁定。设备的默认锁定时间为2000毫秒,桌面的默认锁定时间为5000毫秒。可以使用ssce:default lock timeout属性在连接字符串中增加默认锁定超时。 [Session id = 6,Thread id = 7856,Process id = 10116,Table name = Product,Conflict type = s lock(x blocks),Resource = DDL]
我们的数据库读取很重,但很少写入,我想我已经将所有内容保护到需要的地方。
编辑:SQL CE已经自动使用NOLOCK http://msdn.microsoft.com/en-us/library/ms172398(sql.90).aspx
答案 0 :(得分:1)
我刚刚意识到3.5 SP1包含了一些例外情况中的新信息,让我可以将其固定下来。
SQL Server Compact超时等待锁定。设备的默认锁定时间为2000毫秒,桌面的默认锁定时间为5000毫秒。可以使用ssce:default lock timeout属性在连接字符串中增加默认锁定超时。 [会话ID = 6,线程ID = 7856,进程ID = 10116,表名=产品,冲突类型= s锁(x块),资源= DDL ] < / p>
当我尝试删除必须与其建立打开连接的现有表时,我能够确定它正在发生。
答案 1 :(得分:1)
如果有其他人遇到此页面,我发现了可能发生这种情况的另一个原因。我创建了一个SqlCeTransaction来包装各种语句,我不小心在其中一个语句中没有使用该事务。这导致了我的锁定超时消息。