求教:在C#中执行游标语句时间太长超时,如何解决

问题描述

大概要执行200个循环,执行时间大概是五分钟左右。在页面里执行总是报时间超时。这个应该如何优化,或者说页面发个命令直接后台执行下面这段语句也可以代码见下:DECLARE@FCUSRNUMBERvarchar(50)DECLARE@FDATEVARCHAR(20)SET@FDATE=CONVERT(varchar(20),DATEADD(MM,-1,GETDATE()),23)DECLAREMy_CursorCURSOR--定义游标FOR(selectdistinctFNUMBERfromT_BD_CUSTOMERwhereFPRIMARYGROUPin(selectfidfromT_BD_CUSTOMERGROUPwhereFPARENTID=1304274)andFDOCUMENTSTATUS='C'andFFORBIDSTATUS='A')--查出需要的集合放到游标中OPENMy_Cursor;--打开游标FETCHNEXTFROMMy_CursorINTO@FCUSRNUMBER;--读取第一行数据(将MemberAccount表中的UserId放到@UserId变量中)WHILE@@FETCH_STATUS=0BEGIN--PRINT@FCUSRNUMBER;--打印数据(打印MemberAccount表中的UserId)execPro_BAM_DeptReceiveAuto@FDATE,@FCUSRNUMBERFETCHNEXTFROMMy_CursorINTO@FCUSRNUMBER;--读取下一行数据(将MemberAccount表中的UserId放到@UserId变量中)ENDCLOSEMy_Cursor;--关闭游标DEALLOCATEMy_Cursor;--释放游标GO

解决方案

解决方案二:
使用游标的目的是什么?execPro_BAM_DeptReceiveAuto@FDATE,@FCUSRNUMBER这个存储过程具体在做什么处理?
解决方案三:
设置DBCommand的TimeOut时间
解决方案四:
时间这么长,c#直接异步执行了
解决方案五:
@hanjun0612回复1楼:这个存储过程里面写的是计算单独每个门店每天的销量(相当于一个月的销量)插入到新的数据表里
解决方案六:
我感觉需要优化sql语句,异步执行,把commandtimeout设为0。不能解决问题啊
解决方案七:
引用4楼liuxiBS的回复:

@hanjun0612回复1楼:这个存储过程里面写的是计算单独每个门店每天的销量(相当于一个月的销量)插入到新的数据表里

如果可以的话,你试试给表增加rownumber,然后通过循环来代替游标。看看效率会快一点吗。(当然,这里没有讨论你的execPro_BAM_DeptReceiveAuto,我不清楚你的execPro_BAM_DeptReceiveAuto是不是也很慢)
解决方案八:
如果你的目的就是循环插入表中数据库,可以是用临时表来操作的,游标我从来不用
解决方案九:
引用6楼hanjun0612的回复:

Quote: 引用4楼liuxiBS的回复:
@hanjun0612回复1楼:这个存储过程里面写的是计算单独每个门店每天的销量(相当于一个月的销量)插入到新的数据表里

如果可以的话,你试试给表增加rownumber,然后通过循环来代替游标。看看效率会快一点吗。(当然,这里没有讨论你的execPro_BAM_DeptReceiveAuto,我不清楚你的execPro_BAM_DeptReceiveAuto是不是也很慢)

我试一下
解决方案十:
在网页中进行的操作最好是以秒计,时间太长浏览器都不答应啊,建议改为分批操作,每一批让浏览器刷新一页.
解决方案十一:
引用8楼liuxiBS的回复:

Quote: 引用6楼hanjun0612的回复:
Quote: 引用4楼liuxiBS的回复:
@hanjun0612回复1楼:这个存储过程里面写的是计算单独每个门店每天的销量(相当于一个月的销量)插入到新的数据表里

如果可以的话,你试试给表增加rownumber,然后通过循环来代替游标。看看效率会快一点吗。(当然,这里没有讨论你的execPro_BAM_DeptReceiveAuto,我不清楚你的execPro_BAM_DeptReceiveAuto是不是也很慢)

我试一下

我刚才测试了一下,但是我要根据number执行存储过程,这里只有@i变量,但是如果在根据i去取number,速度又慢了,这个怎么处理比较好!谢谢
解决方案十二:
你看看,循环内部,根据rownum=@i找到你的这一行数据,然后调用execPro_BAM_DeptReceiveAuto方法参照http://www.cnblogs.com/wang-123/p/3746179.html
解决方案十三:
学习了,谢谢11楼!

时间: 2024-09-29 22:36:25

求教:在C#中执行游标语句时间太长超时,如何解决的相关文章

hive中执行sql语句出现的问题

The expression after ELSE should have the same type as those after THEN: "bigint" is expected but "i hive中执行sql语句: select pc.category_id, sum(case when t.so_month between 3 and 5 then t.order_item_num else 0 end) as spring, sum(case when t.

大量数据执行-oracle在存储过程中执行update语句

问题描述 oracle在存储过程中执行update语句 在存储过程中经过加工对表执行update语句,但表的数据太大了,2百多万数据的表我就要执行1个多小时,,,8千多万数据的表要怎么办啊? 解决方案 有这样的思路你可参考下: 思路1.写存储过程,引入loop循环,分批次更新.提交: 思路2.以nologging形式重新建表,按新规则把数据插过来:

请大家帮忙-实现使用C#语言,在.net开发平台中执行sql语句

问题描述 实现使用C#语言,在.net开发平台中执行sql语句 实现使用C#语言,在.net开发平台中执行sql语句了,如查询某张表数据,向某张表插入一条数据,在某张表中编辑一条数据,删除某张表的一条数据. 解决方案 给你段代码,你参考一下 using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlClient; using System.W

java-为什么我在Java类中执行SQL语句,程序没错,而数据库却没执行??

问题描述 为什么我在Java类中执行SQL语句,程序没错,而数据库却没执行?? 解决方案 不知道画了删除线是什么意思,你确认这些代码有效么 解决方案二: 你用的什么啊?Hibernate?还是别的框架啊?Hibernate的话,可能是事务没有提交,你执行flush方法就可以了 解决方案三: 代码可以贴全一点吗?看不到关键部分 解决方案四: 代码内容太少了,你的Sqlca是个什么,最起码给个声明. 解决方案五: 你的sqlca是什么啊? 解决方案六: executeSQL方法问题 这个方法只能是查

ajax请求时间太长,后台返回json,前台无反应。

问题描述 ajax请求时间太长,后台返回json,前台无反应. 1C 由于后台运算会花费较长时间(大概4.5分钟),这个时间一旦较长,再返回Json给页面时页面就没反应了.`` $.ajaxFileUpload({ url : $(this).attr(""action"") secureuri : false formObj : $(this) append_data : { 'datemonth' : datemonthImport } dataType : '

lvs轮调的间隔时间太长,总是转发到同一台服务器上,过很久才能转发到另一台服务器

问题描述 lvs轮调的间隔时间太长,总是转发到同一台服务器上,过很久才能转发到另一台服务器 lvs轮调的间隔时间太长,总是转发到同一台服务器上,过很久才能转发到另一台服务器上,配置文件中的persisence_timeout=0已经注释.还是不行,哪位大神帮帮忙解决一下, 解决方案 我也碰到这个问题.不能刷一次交替一次.你解决了吗?

Win7笔记本电脑开机时间太长了怎么办?

  Win7笔记本电脑开机时间太长了怎么办?        步骤一:需下载安装360安全卫士 1.打开360安全卫士,点击左下角的"优化加速"; 2.点击"开始扫描"(扫描默认选项:开机加速.系统加速.网络加速.硬盘加速); 3.等待扫描完成后点击"立即优化"; 4.优化最后步骤可能会弹出"一键优化提醒"窗口,我们点击窗口中的"全选",然后点击"确认优化". 步骤二: 1.点击开始菜单,

autofocus-ios+zbar 自动对焦时间太长怎么处理?

问题描述 ios+zbar 自动对焦时间太长怎么处理? ios + zbar 扫描条码使用ZBarReaderViewControllercamera界面出来后 对焦很不清楚 需要2秒左右 才能对焦成功请问这个应该怎么设置 解决方案 打电话给IPHONE支持 解决方案二: 打电话给IPHONE支持

在Entity Framework 中执行T-sql语句

从Entity Framework 4开始在ObjectContext对象上提供了2个方法可以直接执行SQL语句:ExecuteStoreQuery 和 ExecuteStoreCommand. 1.使用ExecuteStoreQuery :通过sql查询返回object实体,有有许多需要注意: 1.sql = "select from Payment where Vendor= @vendor";之所以能写成select 是因为Payment对象的属性和表的字段命名完全一致,如果不一