首页 新闻 会员 周边

很不能理解的事情,明明查询结果只有一条记录,但执行LINQ却报Timeout,请高人指教,谢谢!

0
悬赏园豆:50 [已关闭问题] 关闭于 2014-11-15 11:46

很不能理解的事情,明明查询结果只有一条记录,但执行LINQ却报Timeout 

LINQ语法:

var carInfo1 = (from c in asotsDb.T_CarStageInfo
join t in asotsDb.T_CarSolicitTaskInfo
on new { c.chassisno, c.orgcode } equals new { t.chassisno, t.orgcode }
where t.id == tid
select c);

执行报错:

Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。

我通过 asotsDb.GetCommand(carInfo1).CommandText;得出的SQL语句是:

SELECT [t0].[chassisno], [t0].[plateno], [t0].[isshopbrand], [t0].[model], [t0].[style], [t0].[buydate], [t0].[owner], [t0].[driver], [t0].[driveraddress], [t0].[drivertelno], [t0].[lastindate], [t0].[lastinmileage], [t0].[lastcostamount], [t0].[lastcontactsa], [t0].[lastcontactsaid], [t0].[lastmaintaindate], [t0].[lastmaintainmileage], [t0].[lastmaintainsa], [t0].[lastmaintainsaid], [t0].[orgcode], [t0].[avgmileage], [t0].[maintaincycle], [t0].[yearincount], [t0].[yearmaintaincount], [t0].[yearcostamount], [t0].[singleamount], [t0].[stage], [t0].[lastupdatedatetime], [t0].[attr1], [t0].[attr2], [t0].[attr3]
FROM [dbo].[T_CarStageInfo] AS [t0]
INNER JOIN [dbo].[T_CarSolicitTaskInfo] AS [t1] ON ([t0].[chassisno] = [t1].[chassisno]) AND ([t0].[orgcode] = [t1].[orgcode])
WHERE [t1].[id] = '6CE919A7-C023-4534-A3CE-001068A0CB36'

在查询分析器中执行无问题,但就是执行LINQ报错,还请哪位高人指点一下,非常感谢!

梦在旅途的主页 梦在旅途 | 初学一级 | 园豆:10
提问于:2014-11-12 12:09
< >
分享
所有回答(5)
0

遇到过一次这种情况,不过 执行的SQL,页面那边超时,设置了超时时间还是没用,最后解决的方案优点奇葩,重建了索引还有换了join后面的查询条件顺序,莫名好了,非主流解决方案,看看可以拨

 

另外看下,我以前发的同样的问题,然后你看下解决方案,看是否有效

http://q.cnblogs.com/q/65517/

风醉 | 园豆:1197 (小虾三级) | 2014-11-12 12:18

之前都是执行OK的,就今天才出现这个问题,通过多次尝试终于解决了,原因是由于我在查询分析器中执行了涉汲LINQ语句相关的表的存储过程,而且报错了,事务可能没有回滚,也没有提交,造成阻塞了,我关掉查询分析器后运行正常。

我那个SQL存储过程是:

ALTER PROCEDURE [dbo].[UpdateCarStageInfo_sp]
@orgcode VARCHAR(10)=''
AS
BEGIN TRY

    BEGIN TRANSACTION

        。。。 。。。省略

    COMMIT TRANSACTION

END TRY

BEGIN CATCH
    IF @@TRANCOUNT > 0 //这里是否要加判断,现在加了反而没有回滚,但也没有提交???
    BEGIN
        ROLLBACK TRANSACTION;
    END
    
    DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int
    SELECT @ErrMsg = ERROR_MESSAGE(),
           @ErrSeverity = ERROR_SEVERITY()

    RAISERROR(@ErrMsg, @ErrSeverity, 1)
    
END CATCH

 

支持(0) 反对(0) 梦在旅途 | 园豆:10 (初学一级) | 2014-11-12 12:49
-1

联合查询会反复飞访问数据库,做个视图吧!然后操作视图!

大楚打码人 | 园豆:4313 (老鸟四级) | 2014-11-12 12:20
0

问题解决了,原因是LINQ所用的表被其它事务阻塞了(之前调SP报错,没回滚且没有提交)

梦在旅途 | 园豆:10 (初学一级) | 2014-11-12 13:03
0

慎用事物...

幻天芒 | 园豆:37175 (高人七级) | 2014-11-12 14:01
0

一般这种情况可能我都是先判定是否断网

刘宏玺 | 园豆:14020 (专家六级) | 2014-11-12 15:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册