1、执行存储过程,里面做了大量处理,所以页面点击操作后超时。
2、程序中设置超时时间这个知道,但我想能不能程序发送了查询命令给数据库,然后程序不等待数据库返回结果,让数据库端自己处理完成,我稍候回来刷新页面就可以看到结果。因为没有详细了解里面的原理,请懂得的朋友指教。
3、如果有其他方案也请大家指教指教。
不等返回 —— 那如何确定服务器收到了(或者收完了)执行指令流呢。
这个跟一个http一次请求协议是一回事,你没收到200前什么事情都可能发生。
所以程序肯定是要响应的,至于不想让页面等待,你做个异步处理不就完了。
谢谢赐教,我再研究研究。
这个情况有点类似于委托的执行等待毁掉结果,要么等待执行完成自动回调,要么设计一个标记轮询。感觉轮询会简单一些,数据库服务器压力不大的话,可以考虑从轮询,在数据库做一个标记,程序没隔多久查一次,如果完成了直接查结果
嗯,谢谢。现在想到的是在前端点击操作后,用一个表记录,然后数据库用定时作业轮询这个表,发现目标就去调用存储过程生成数据。
异步处理试试,开个Task试试
谢谢赐教,我再研究研究。
是使用原生的吗? 设置一下commd对象的setimeOut时间
谢谢回复,设置超时时间不是比较好的解决方案。
异步操作。
客户端查询时,创建一个任务,发送到服务端,服务端根据客户端请求创建任务记录,并返回任务id,
客户端获取任务id后轮询或手动查询服务端任务状态。
服务端子进程执行任务保存结果并标记任务完成。
客户端查询任务完成后获取服务端执行的结果,显示结果后标记当前任务完成并销毁。
不知道这种操作能不能满足你的需求。
方法1:优化存储过程:任何操作一旦需要长时间,就要考虑流程是否合理。
方法2:异步操作:开辟一个后台线程去执行,不影响其他操作。
1.你可以为 此次存储过程设置一个"批次ID",并将执行数据集通过批次ID存储至数据库中。
2.前端程序去检索这个批次ID 是否生成了数据,如果生成就取回,就可以了。
-------------------------------
让调用存储过程执行和存储过程返回结果两个步骤分开 获取结果,就不会由于你的超时而出现问题。