SQL查询在代码中超时,但在管理工作室需要几秒钟

本文关键字:几秒 工作室 管理工作 中超 代码 查询 超时 管理 SQL | 更新日期: 2023-09-27 18:12:13

我知道以前也有人问过类似的问题,也有一些实体框架,但我还没有得到他们中的任何一个为我工作。

我有一个使用实体框架数据优先方法的遗留代码,并调用存储过程,如;

var result = context.Database.SqlQuery<VoidEvent>("p_VoidEventSearchList @UserId, @EventTypeId, @StartDate, @EndDate, @ManagementArea, @ManagementArea2 "
                , new SqlParameter("@UserId", UserId)
                , new SqlParameter("@EventTypeId", EventTypeId)
                , new SqlParameter("@StartDate", Convert.ToDateTime(StartDate))
                , new SqlParameter("@EndDate", Convert.ToDateTime(EndDate).AddDays(1))
                , new SqlParameter("@ManagementArea", ManagementArea)
                , new SqlParameter("@ManagementArea2", ManagementArea2)
                ).ToList();
            return result;

这是抛出一个超时错误,而如果我得到查询从分析器和运行它在管理工作室只需要3秒;

exec sp_executesql N'p_VoidEventSearchList @UserId, @EventTypeId, @StartDate, @EndDate, @ManagementArea, @ManagementArea2 ',N'@UserId nvarchar(36),@EventTypeId int,@StartDate datetime,@EndDate datetime,@ManagementArea nvarchar(4000),@ManagementArea2 nvarchar(4000)',@UserId=N'e91a860e-e04a-421c-8b0b-a4602aca1856',@EventTypeId=0,@StartDate='1753-01-01 00:00:00',@EndDate='9999-12-30 23:59:00',@ManagementArea=N'',@ManagementArea2=N''

存储过程参数为:

ALTER PROCEDURE [dbo].[p_VoidEventSearchList]
    @UserId NVARCHAR(40) = ''
    , @EventTypeId INT = 0
    , @StartDate datetime--nvarchar(10) = ''
    , @EndDate datetime--nvarchar(10)  = ''
    , @ManagementArea NVARCHAR(10) = ''
    , @ManagementArea2 NVARCHAR(10) = '' 
AS
BEGIN

正如一些帖子所建议的那样,我已经确保将数据时间传递为datetime而不是字符串,但这没有帮助,调用仍然超时。

SQL查询在代码中超时,但在管理工作室需要几秒钟

SQL Server管理工作室和您的应用程序以不同的方式连接到SQL Server。我会检查你的连接字符串在你的。net应用程序,看看是否有任何时髦的连接选项。此外,应用程序解析SQL服务器所使用的网络路由也可能是超时的原因。

@MicrosoftDN. cn。谢谢你的链接。这有点奇怪,但当我设置ARITHABORT OFF,查询仍然需要3秒的管理工作室,但实际上是快得多的代码,没有超时发生。我在sp的开头设置了ARITHABORT OFF,在sp的末尾设置了ON。

MSDN说"将ARITHABORT设置为OFF可以接收不同的查询计划,使得难以排除性能较差的查询。也就是说,相同的查询可以在管理工作室中执行得很快,但在应用程序中执行得很慢,但在这种情况下,当我将其设置为OFF时,它实际上在代码中运行得比以前快。我不知道为什么会这样