【发布时间】:2019-12-25 06:11:36
【问题描述】:
我有一个在后端使用 MS Access 数据库的 .NET 网站。我知道 SQL Server 更好,但我现在坚持使用 MS Access。我可以毫无问题地连接并执行插入、更新等操作,除了一个特殊情况:当我执行 ffmpeg.exe 可执行文件时,它会运行一个转换文件的进程大约一分钟并每秒更新一次数据库.在 ffmpeg 运行时,我让 javascript 执行 ajax XMLHttpRequest 帖子,同时获取更新的值,以便我可以更新进度条。
问题是在 ffmpeg 完成之前 XMLHttpRequest 不会执行,但我需要它们同时运行。下面是一个简短的例子,用伪代码形式,带有数字以便于阅读,说明正在发生的事情:
...ffmpeg started...
var ajax = new XMLHttpRequest(); //1
ffmpeg update 1
var ajax = new XMLHttpRequest(); //2
ffmpeg update 2
var ajax = new XMLHttpRequest(); //3
ffmpeg update 3
var ajax = new XMLHttpRequest(); //4
...ffmpeg ended...
ajax.onreadystatechange... //1
ajax.onreadystatechange... //2
ajax.onreadystatechange... //3
ajax.onreadystatechange... //4
但我需要做的是:
...ffmpeg started...
var ajax = new XMLHttpRequest(); //1
ajax.onreadystatechange... //1
ffmpeg update 1
var ajax = new XMLHttpRequest(); //2
ajax.onreadystatechange... //2
ffmpeg update 2
var ajax = new XMLHttpRequest(); //3
ajax.onreadystatechange... //3
ffmpeg update 3
var ajax = new XMLHttpRequest(); //4
ajax.onreadystatechange... //4
...ffmpeg ended...
我认为 ffmpeg 正在锁定数据库并阻止 ajax 读取执行,但它们应该同时发生并轮流访问数据库。我在更新、读取等方面的连接字符串如下:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyDatabase.accdb;。
每个 javascript 帖子如下所示:
var obj = { filename: fName };
var myJSON = JSON.stringify(obj);
var url = 'Handler_Uploads.aspx?command=checkconversion&filename=' + fName;
var ajax = new XMLHttpRequest();
ajax.open("POST", url, true);
ajax.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
ajax.send(myJSON);
我应该提到我已经尝试添加“Mode=Share Deny None;”到连接字符串,但结果相同。
【问题讨论】:
标签: ajax multithreading ms-access xmlhttprequest progress-bar