2009-09-14 4 views
2

У меня есть приложение, в котором я использую Sql Compact 3.5 с VS2008. Я запускаю несколько потоков в моем приложении, которое связывается с компактной базой данных и обращается к строке. Он выбирает и удаляет эти строки таким образом, что вы выбираете и предоставляете приложению 5 строк и удаляя эти строки из таблицы. Он отлично работает с одним потоком, но если я использую несколько потоков, то, если работает 3 или более потока, я часто получаю ошибку TimeOut !!! Я увеличил свойство Time out в строке соединения, но это не дало ожидаемого результата. Журнал ошибок выглядит следующим образом:SQL Server Compact в ожидании блокировки

SQL Server Compact, ожидающий блокировки. Время блокировки по умолчанию - 2000 мс для устройств и 5000 мс для настольных компьютеров. Тайм-аут блокировки по умолчанию можно увеличить в строке подключения, используя свойство тайм-аута блокировки ssce: default. [Идентификатор сеанса = 5, Идентификатор потока = 4204, Идентификатор процесса = 4808, Имя таблицы = XXX, Тип конфликта = блокировка x (s), Ресурс = TAB]

Запрос, который я использую для извлечения, выглядит следующим образом:

" выберите Top (5) * от TableName порядка по идентификатору; удалить из TableName, где идентификатор (выберите верхний (5) идентификатор из TableName порядка по идентификатору); "

есть ли способ, с помощью которые мы можем избежать этого исключения времени вне ???????

Вышеупомянутый запрос I un как транзакция в VS2008 с использованием SQLCECommand, а другой - с помощью SqlCEDataAdapter.

Любая идея !!!!!! Ответ

ответ

1

Есть некоторые настройки строки подключения, которые вы можете попробовать, например, «тайм-аут блокировки по умолчанию» и т. Д.

См. SqlCeConnection.ConnectionString Property по адресу http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceconnection.connectionstring(VS.80).aspx.

(у меня не было ничего, кроме проблем цепочки запросов с запятой.)

0

Я использую по умолчанию Автоблокировка свойства, но не кажется, реагирует или что. Он по-прежнему дает мне ту же ошибку, которую я сохранил, это значение 10000. Запрос ждет до этого времени, и он находит, пока таблица не занята, и, следовательно, она дает исключение. Есть ли способ, чтобы мы блокировали только hte строку вместо таблицы ??????

2

У меня была точно такая же проблема. Я знаю, что это старый вопрос, но для кого-либо из Google для ответа я исправил его, вызвав Reader.Close() на моем dataReader, когда я закончил с ним.

Приложение было однопоточным, но я получал это все время, если слишком много запросов слишком много сделал.

Я надеюсь, что это поможет!

0

У меня была такая же проблема, только сейчас ...

Проблема в том, что я проделала ALTER таблицу в транзакции, а затем попытался прочитать из этой таблицы позже в той же транзакции. упс. Удалил таблицу ALTER из транзакции, и все снова замечательно.

Смежные вопросы