Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Default Lock Timeout (SQL Compact 4)  [new]
Businesss
Member

Откуда:
Сообщений: 7
Здравствуйте.

Я в Visual Studio 2010\Данные\Редактор T-SQL\... прописываю следующие строки и ссно выполняю:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

BEGIN TRANSACTION;

SELECT * FROM MyTable;

Одновременно в коде C# (ADO.NET) в ConsoleApplication
Я начинаю соединение и пытаюсь добавить в MyTable еще одну запись

При этом я указываю:
SqlCeConnection.ConnectionString = "[b]Default Lock Timeout=50000;[/b] File Mode = 'Read Write'; Data Source='D:\\test.sdf';";

После приблизительно 2-5секунд вылетает ошибка:
"Превышено время ожидания блокировки SQL Server Compact. Время блокировки по умолчанию 2000 мс. Время блокировки по умолчанию можно увеличить в строке подключения с использованием свойства ssce: тайм-аут блокировки по умолчанию. [ Session id = 2,Thread id = 3880,Process id = 4108,Table name = MyTable,Conflict type = ix lock (s blocks) System.Exception {System.Data.SqlServerCe.SqlCeLockTimeoutException}"

Указание
"Default Lock Timeout/SSCE:Default Lock Timeout"
также не работает и в дополнительных свойствах при подключении к файлу базы данных, в Visual Studio 2010\Редактор T-SQL

Вот параметры connection-а
SqlCeConnection.ServerVersion="4.0.8482.1"
Ставил SQL Compact через web platform installer на Windows 7 x64.

Пробовал переустанавливать отдельным файлом SSCERuntime_x64-RUS.exe;
Создавал новый файл бд - ничего не помогает.

Как заставить работать свойство
"Default Lock Timeout"
?
18 май 11, 00:05    [10668466]     Ответить | Цитировать Сообщить модератору
 Re: Default Lock Timeout (SQL Compact 4)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
В кавычках?
ConnectionString
ssce:default lock timeout="5000";
Мда, кроме как в SP2 решили баг 3-ей версии ничего не нашёл.
18 май 11, 01:34    [10668650]     Ответить | Цитировать Сообщить модератору
 Re: Default Lock Timeout (SQL Compact 4)  [new]
Businesss
Member

Откуда:
Сообщений: 7
Mnior,

Указывал 50секунд и в кавычках и в апострофах и с "ssce:" и без.... и в коде и при подключению к Редактору T-SQL....
Вот.... - решил посмотреть что за Compact....
Мда........... ;-)
18 май 11, 22:08    [10674534]     Ответить | Цитировать Сообщить модератору
 Ответ: Default Lock Timeout (SQL Compact 4)  [new]
Businesss
Member

Откуда:
Сообщений: 7
Немного поигравшись с данным свойством строки - пришел к такому выводу:
"Default Lock Timeout" у Microsofta работает, но как всегда - через одно место!

Проверял я примерно так (только на ADO.NET):

создал 2 инструкции:
SELECT * FROM MyTable;
INSERT INTO MyTable (Name) VALUES ('проверочная строка');

Создал два потока:
1й поток выполняет SELECT с "Default Lock Timeout = 1000"
и не закрывает свою Serializable-транзакцию 8 секунд == Thread.Sleep(8000)

2й поток начинает INSERT с "Default Lock Timeout = 6000", но ссно натыкается на блокировку 1го потока

И-и-и.... (я думал, что 2й поток будет ждать 6 секунд)
Но к сожалению 2й поток прождав одну секунду - выдал, что больше ждать ему запретил 1й поток!

Вывод - по мнению майкрософта (судя по всему), свойство "Default Lock Timeout" указанное в строке подключения предлагает транзакции, "работающей с этой строкой", "выгонять из базы" другие транзакции через указанное в свойстве время, А НЕ "прерывать выполнение" транзакции, в случае если транзакция желает не быть заблокированной указанное "этой транзакцией", в своей строке подключения, время.

Ну и вывод №2 - приходится указывать самое большОе "Default Lock Timeout" во всех подключениях, для безотказной работы остальных подключений (в ADO.NET, по крайней мере).
1 июл 11, 04:16    [10903769]     Ответить | Цитировать Сообщить модератору
 Re: Default Lock Timeout (SQL Compact 4)  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
Businesss,

версию сервера не указали.
1 июл 11, 04:22    [10903773]     Ответить | Цитировать Сообщить модератору
 Re: Default Lock Timeout (SQL Compact 4)  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
палюбасу, таймаут приходит не от ADO, а от сервера.
для 2000 я писал на уровне TCP доступ, там от либы ничо не зависит.
Отлуп приходит тока в виде ошибки от сервака.

значит, не в ADO дело, а в сервере.
и в командах к нему.
1 июл 11, 04:25    [10903775]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить