我必须在数据库中存储多个文件。为了做到这一点,我使用了 blueimp 编写的 jQuery Multiple File Uplaod 控件。对于服务器语言,我使用 asp.net。它使用一个处理程序——ashx,它接受每个特定文件并将其存储在数据库中。在我的数据库中,我有一个存储过程,它返回当前上传文件的文档 ID,然后将其存储到数据库中。这是其中的一个代码片段,它表明获取此 ID 是一个 3 步过程:
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
当执行被事务阻塞时,有没有办法用相同的参数再次调用存储过程?
另一种选择是与选项“sequentialUploads = true”同步使用blueimp插件。这个选项适用于除firefox之外的所有浏览器,我读到它也不适用于Safari。
任何的意见都将会有帮助。我尝试并启用一次只选择一个文件的选项,这不是最好的,但会停止数据库问题(存储过程)并正确保存文件。
谢谢, 最好的问候, Lyuubomir