很不能理解的事情,明明查询结果只有一条记录,但执行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报错,还请哪位高人指点一下,非常感谢!
遇到过一次这种情况,不过 执行的SQL,页面那边超时,设置了超时时间还是没用,最后解决的方案优点奇葩,重建了索引还有换了join后面的查询条件顺序,莫名好了,非主流解决方案,看看可以拨
另外看下,我以前发的同样的问题,然后你看下解决方案,看是否有效
之前都是执行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
联合查询会反复飞访问数据库,做个视图吧!然后操作视图!
问题解决了,原因是LINQ所用的表被其它事务阻塞了(之前调SP报错,没回滚且没有提交)
慎用事物...
一般这种情况可能我都是先判定是否断网