我知道之前有人在这里问过类似的问题,还有一些与 Entity Framework 有关,但我没有找到任何适合我的问题。
我有一个遗留代码,它使用 Entity Framework 数据优先方法并调用存储过程;
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
由于某些帖子已经提示,我已确保数据时间作为日期时间而不是字符串传递,但这没有帮助,调用仍然超时。
最佳答案
SQL Server management studio 和您的应用程序以不同的方式连接到 SQL Server。 我会检查您的 .net 应用程序中的连接字符串,看看是否有任何时髦的连接选项。此外,您的应用程序解析 SQL 服务器所采用的网络路由也可能是超时的原因。
关于c# - SQL 查询在代码中超时,但在管理工作室中需要几秒钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32504030/