首页 新闻 会员 周边 捐助

.Net执行sql查询(执行)超时的解决方案?

0
悬赏园豆:20 [已解决问题] 解决于 2019-07-28 20:23

1、执行存储过程,里面做了大量处理,所以页面点击操作后超时。
2、程序中设置超时时间这个知道,但我想能不能程序发送了查询命令给数据库,然后程序不等待数据库返回结果,让数据库端自己处理完成,我稍候回来刷新页面就可以看到结果。因为没有详细了解里面的原理,请懂得的朋友指教。
3、如果有其他方案也请大家指教指教。

txworld的主页 txworld | 初学一级 | 园豆:49
提问于:2019-07-26 10:24
< >
分享
最佳答案
0

不等返回 —— 那如何确定服务器收到了(或者收完了)执行指令流呢。

这个跟一个http一次请求协议是一回事,你没收到200前什么事情都可能发生。

所以程序肯定是要响应的,至于不想让页面等待,你做个异步处理不就完了。

收获园豆:10
花飘水流兮 | 专家六级 |园豆:13617 | 2019-07-26 12:19

谢谢赐教,我再研究研究。

txworld | 园豆:49 (初学一级) | 2019-07-26 14:25
其他回答(6)
0

这个情况有点类似于委托的执行等待毁掉结果,要么等待执行完成自动回调,要么设计一个标记轮询。感觉轮询会简单一些,数据库服务器压力不大的话,可以考虑从轮询,在数据库做一个标记,程序没隔多久查一次,如果完成了直接查结果

收获园豆:10
X君 | 园豆:183 (初学一级) | 2019-07-26 10:42

嗯,谢谢。现在想到的是在前端点击操作后,用一个表记录,然后数据库用定时作业轮询这个表,发现目标就去调用存储过程生成数据。

支持(0) 反对(0) txworld | 园豆:49 (初学一级) | 2019-07-26 10:53
0

异步处理试试,开个Task试试

会长 | 园豆:12463 (专家六级) | 2019-07-26 13:50

谢谢赐教,我再研究研究。

支持(0) 反对(0) txworld | 园豆:49 (初学一级) | 2019-07-26 14:25
0

是使用原生的吗? 设置一下commd对象的setimeOut时间

马玉溁 | 园豆:27 (初学一级) | 2019-07-28 17:41

谢谢回复,设置超时时间不是比较好的解决方案。

支持(0) 反对(0) txworld | 园豆:49 (初学一级) | 2019-07-28 20:23
0

异步操作。
客户端查询时,创建一个任务,发送到服务端,服务端根据客户端请求创建任务记录,并返回任务id,
客户端获取任务id后轮询或手动查询服务端任务状态。
服务端子进程执行任务保存结果并标记任务完成。
客户端查询任务完成后获取服务端执行的结果,显示结果后标记当前任务完成并销毁。

不知道这种操作能不能满足你的需求。

日常上班犯困 | 园豆:192 (初学一级) | 2019-07-29 15:35
0

方法1:优化存储过程:任何操作一旦需要长时间,就要考虑流程是否合理。
方法2:异步操作:开辟一个后台线程去执行,不影响其他操作。

木狼 | 园豆:206 (菜鸟二级) | 2019-08-06 15:38
0

1.你可以为 此次存储过程设置一个"批次ID",并将执行数据集通过批次ID存储至数据库中。
2.前端程序去检索这个批次ID 是否生成了数据,如果生成就取回,就可以了。
-------------------------------
让调用存储过程执行和存储过程返回结果两个步骤分开 获取结果,就不会由于你的超时而出现问题。

Adeal2008 | 园豆:204 (菜鸟二级) | 2019-09-28 16:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册