asp.net 查询数据库超时问题

lmhosts 2010-11-02 05:07:09
各位好!

我是利用VS2008工具 采用C#语言开发的WEB程序,我将工具箱中的GridView控件拖拽到default.aspx页面上,然后通过小箭头> 向导方式增加了数据源并通过向导方式完成【查询】 、【编辑】、【删除】等功能。

完全采用向导方式实现以上功能,这样问题就来了!当我输入 条件时候,点查询,出现查询超时的提示!我是通过存储过程查询某表中的数据。咱们抛开数据库优化,请问根据我的情况,怎么更改默认查询超时的30秒时间,由于我是利用向导完成的,我找不到代码啊,不知道在哪加CommandTimeout =

再网上看到很多资料

1: web.config 增加 <httpRuntime maxRequestLength="102400" executionTimeout="43200" />
2:在数据库连接字符串后增加Connect Timeout=18000
3: 设置连接数据库的超时时间 con.ConnectionTimeout = 180
4:设置执行超时时间 cmd.CommandTimeout = 180

一般都是以上的解决办法,那么我是利用向导方式的,我在哪加啊?


贴一下default.aspx代码

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:QueryCenterConnectionString %>"
SelectCommand="SMS_FEESELECT" SelectCommandType="StoredProcedure" >

<SelectParameters>
<asp:ControlParameter ControlID="TextBox1" Name="DestTerminalID"
PropertyName="Text" Type="String" />
</SelectParameters>
</asp:SqlDataSource>


//SMS_FEESELECT 是数据库中存储过程的名称


报错代码如下

超时时间已到。在操作完成之前超时时间已过或服务器未响应。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.SqlClient.SqlException: 超时时间已到。在操作完成之前超时时间已过或服务器未响应。

源错误:

执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪:

...全文
821 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
加油馒头 2010-11-03
  • 打赏
  • 举报
回复
这个不是超时问题

这种数据量建议不要用 微软这种控件。。。你不好控制

更何况你只取三条数据而已
缪军 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lmhosts 的回复:]
我现在只想解决 在哪加 cmd.CommandTimeout = 180

我是利用向导完成的 gridview控件的一些代码. 我在哪里加啊......
[/Quote]
楼主,建索引1分钟都要不了
代码如下,执行一下就好了
CREATE NONCLUSTERED INDEX IX_SMS_FEE ON dbo.SMS_FEE
(
DestTerminalID
) ON [PRIMARY]
lmhosts 2010-11-02
  • 打赏
  • 举报
回复
blueclair 这位兄弟

gridview中我怎么没找到autogeneralpage属性啊!


GridView中 A开头的属性如下:
AccessKey
Allowpaging
Allowsorting
Autolternatingrowstyle
AutoGenerateColumns
AutoGenerateDeleteButton
AutoGenerateEditButton
AutoGenerateSelectButton

没有你说的那个属性啊!
blueclair 2010-11-02
  • 打赏
  • 举报
回复
default.aspx 选中gridview 属性 里面有个autogeneralpage 属性是true
lmhosts 2010-11-02
  • 打赏
  • 举报
回复
我现在只想解决 在哪加 cmd.CommandTimeout = 180

我是利用向导完成的 gridview控件的一些代码. 我在哪里加啊......
缪军 2010-11-02
  • 打赏
  • 举报
回复
这种简单查询能消耗这么长时间??
楼主没建索引吧,
按照where字句的字段建索引,应该0秒就能检索出来
lmhosts 2010-11-02
  • 打赏
  • 举报
回复
是48秒 上面写错了
lmhosts 2010-11-02
  • 打赏
  • 举报
回复
我用SQL server 2000 查询分析器 查询 sms_fee表中的 某条数据 用了28秒,前提 sms_fee内有1000多万条数据!

奉献图

lmhosts 2010-11-02
  • 打赏
  • 举报
回复
不瞒你说,数据表中有1000万条数据,是用户用手机打电话保存的记录

1000万条数据中 平均没个手机号码 也就3条记录左右!

我主要是提供给客服查询 某用户使用记录情况! 1000万条数据不会一次性显示出来,每次查询也就显示1000万条记录中的 几条数据!

经过查询 200万条数据 查询 3秒就能显示出来!后来数据表数据增加到1000万了,查询就超时了。

能不能抛开数据库,我就想查询,不怕慢,

我把存储过程贴出来!


--***********************************************************************
--* 名 称:SMS_FEESELECT
--* 作 者:王刚
--* 日 期:2010-11-01
--* 说 明:查询用户扣费信息
--***********************************************************************

CREATE PROCEDURE [dbo].[SMS_FEESELECT]
@DestTerminalID VARCHAR(13) --用户号码 为什么长度13位? 用户手机号码11位+86 =总位长11

AS

BEGIN

SET NOCOUNT ON

SET @DestTerminalID= LTRIM(RTRIM(@DestTerminalID)) --首先将WEB页面上用户填写的号码左右去空格

SET @DestTerminalID = '86' + @DestTerminalID --将WEB页面上用户填写的号码+86

SELECT * FROM SMS_FEE WHERE DESTTERMINALID=@DestTerminalID --查询数据

SET NOCOUNT OFF

END

--********************[SMS_FEE]********************
GO
Rock870210 2010-11-02
  • 打赏
  • 举报
回复
数据过多,有多少?竟然多的超时。如果真这样,楼主就不应该去延长超时时间来实现数据展示。而是去做数据分页。
lmhosts 2010-11-02
  • 打赏
  • 举报
回复
1、数据库服务启动 是正常的
2、连接字符串 是正确的
3、查询表中的数据也是正常


原因就是数据表中的数据过多,所以查询会提示超时, 我只想知道怎么哪填写 cmd.CommandTimeout = 180

Rock870210 2010-11-02
  • 打赏
  • 举报
回复
1、数据库服务启动
2、连接字符串正确
3、每次使用后要关闭连接,否则连接池满了同样超时
bluk44444 2010-11-02
  • 打赏
  • 举报
回复
这个你首先需要检查下数据库服务是否打开,还有链接字符串是否配置正确。你可以点VS上边的视图然后服务器资源管理器然后他会出现你的数据库相关链接,你可以在这里做下测试,看是否正常。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧