Мне нужно хранить несколько файлов в базе данных. Для этого я использую элемент управления jQuery Multiple File Uplaod, написанный blueimp. В качестве языка сервера я использую asp.net. Он использует обработчик — ashx, который принимает каждый конкретный файл и сохраняет его в БД. В моей БД у меня есть хранимая процедура, которая возвращает идентификатор документа загруженного в данный момент файла, а затем сохраняет его в БД. Это фрагмент кода из него, который показывает, что получение этого идентификатора представляет собой трехэтапную процедуру:
SELECT TOP 1 @docIdOut = tblFile.docId -- ,@creator=creator,@created=created FROM [tblFile] WHERE friendlyname LIKE @friendlyname AND @categoryId = categoryId AND @objectId = objectId AND @objectTypeId = objectTypeId ORDER BY tblFile.version DESC
IF @docIdOut = 0 BEGIN --get the next docId SELECT TOP 1
@docIdOut = docId + 1 FROM [tblFile] ORDER BY docId DESC END
IF @docIdOut = 0 BEGIN --set to 1 SET @docIdOut = 1 END
Если выполняется более одного вызова этой хранимой процедуры, возникает проблема из-за несогласованности данных, но если я добавлю транзакцию, загрузка некоторых файлов будет отменена.
https://dl.dropboxusercontent.com/u/13878369/2013-05-20_1731.png
Есть ли способ снова вызвать хранимую процедуру с теми же параметрами, когда выполнение заблокировано транзакцией?
Другой вариант — использовать плагин blueimp синхронно с параметром «sequentialUploads = true». Этот вариант работает для всех браузеров, кроме firefox, и я читал, что он не работает и для Safari.
Любые предложения были бы полезны. Я попытался включить опцию для выбора только одного файла за раз, что не является лучшим, но остановит проблемы с БД (процедура strored) и сохранит файлы правильно.
Спасибо, С уважением, Любомир