【问题标题】:SQL Server Compact timed out waiting for a lockSQL Server Compact 在等待锁定时超时
【发布时间】:2009-09-14 09:44:54
【问题描述】:

我有一个应用程序,我将 Sql Compact 3.5 与 VS2008 一起使用。我在我的应用程序中运行多个线程,这些线程与紧凑型数据库联系并访问该行。它以一种方式选择和删除这些行,即选择并向应用程序提供 5 行并从表中删除这些行。它适用于单个线程,但如果我使用多个线程,即如果 3 个或更多线程正在运行,我经常会收到超时错误!!!我增加了连接字符串中的 Time out 属性,但它没有给我预期的结果。错误日志如下:

SQL Server Compact 在等待锁定时超时。设备的默认锁定时间为 2000 毫秒,台式机的默认锁定时间为 5000 毫秒。可以使用 ssce: default lock timeout 属性在连接字符串中增加默认锁定超时。 [会话id = 5,线程id = 4204,进程id = 4808,表名=XXX,冲突类型=x锁(s块),资源=TAB]

我用来检索的查询如下:

" select Top(5) * from TableName order by id; 从 TableName 中删除 id in(select top(5) id from TableName order by id); "

有什么方法可以避免这个超时异常??????

上面的查询我在VS2008中作为一个事务使用SQLCECommand,另一个使用SqlCEDataAdapter。

任何想法!!!!!! 回复

【问题讨论】:

    标签: timeout locking sql-server-ce


    【解决方案1】:

    我也遇到过同样的问题。我知道这是一个老问题,但对于任何在谷歌上搜索答案的人来说,当我完成它时,我通过在我的 dataReader 上调用 Reader.Close() 来修复它。

    该应用程序是单线程的,但如果我太快地发出太多请求,我就会一直得到这个。

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

      您可以尝试一些连接字符串设置,例如“默认锁定超时”等。

      请参阅SqlCeConnection.ConnectionString Propertyhttp://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceconnection.connectionstring(VS.80).aspx

      (我只能用分号链接查询。)

      【讨论】:

        【解决方案3】:

        我刚才也遇到了同样的问题……

        问题是我在事务中创建了ALTER 表,然后在同一事务中稍后尝试从该表中读取。哎呀。从事务中删除了ALTER 表,一切又变得美好了。

        【讨论】:

          【解决方案4】:

          尽管使用 SQLCE 进行多线程是可能的,但数据库非常限于并发事务。

          在 using 语句中封装每个实现 IDisposable 的 SQLCE 相关类绝对是一个好主意,但根据负载可能仍会发生锁定错误。

          似乎没有一个连接字符串超时选项可以解决这个问题。 作为一种解决方法,我只是在发生锁定错误时重试该操作。

          请注意,大型 SQL 服务器不会因此受到影响。并行处理没有任何问题。

          【讨论】:

            猜你喜欢
            • 2016-12-16
            • 2011-01-07
            • 1970-01-01
            • 2019-11-20
            • 2017-02-01
            • 2011-01-24
            • 1970-01-01
            • 1970-01-01
            • 2011-12-25
            相关资源
            最近更新 更多