SQL Server表中有多条记录时,SqlDataReader超时
本文关键字:记录 SqlDataReader 超时 Server SQL | 更新日期: 2023-09-27 18:16:34
我有一个存储过程Topounce
,它从动态表中获取顶部记录并从PC中说出。当记录太多时,它会在中超时
SqlDataReader dr2 = select.ExecuteReader()
目前大约有750张唱片。我已经试过CommandTimeOut = 0
了,大约花了10分钟才说出这张唱片。有办法绕过这个吗?
错误如下:
超时已过期。在操作完成或服务器没有响应之前经过的超时时间。
代码:
try
{
using (SqlConnection connStr2 = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString))
{
//Selects top record from vwAnno
SqlCommand select = new SqlCommand("Topounce", connStr2);
select.CommandType = CommandType.StoredProcedure;
select.Parameters.AddWithValue("@ID", (string)Num);
connStr2.Open();
SqlDataReader dr2 = select.ExecuteReader(); // TIMES OUT HERE
//Reads record in vwAnnounce
while (dr2.Read())
{
//do work
}
dr2.Close(); //Close Datareader connection
connStr2.Close();
}
更新这是存储过程。
USE [Queue]
GO
/****** Object: StoredProcedure [dbo].[TopRowViewAnnounce] Script Date: 06/01/2013 11:55:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[TopRowViewAnnounce]
@QueueID int
AS
BEGIN
SELECT TOP 1 id, qdate, ticket_number, QID, received, displaynum, station, transcodevoiced FROM vwAnnounce WHERE QID = @ID ORDER by received ASC
END
我之所以做存储过程,是因为我认为它有助于超时。我本来是这样的。
SqlCommand select = new SqlCommand("SELECT TOP 1 id, qdate, ticket_number, QID, received, displaynum, station, transcodevoiced FROM vwAnnounce WHERE QID = @ID ORDER by received ASC", connStr2);
select.CommandType = CommandType.StoredProcedure;
select.Parameters.AddWithValue("@ID", (string)Num);
connStr2.Open();
SqlDataReader dr2 = select.ExecuteReader(); // TIMES OUT HERE
我还没有找到解决办法。任何人
在连接字符串中添加Connect Timeout=120
。
默认情况下,连接超时为30秒。
由于它正在检索大量记录,您需要根据自己的需要增加时间。
您的连接字符串可以是:
data source=ServerName;initial catalog=DBName;uid=ID;pwd=Password;Connect Timeout=120
在IIS上也有timeout
设置。
IIS > Website tab > Connection time out box
。
设置IIS应保持空闲连接的最大超时值(以秒为单位(。
希望它能有所帮助。