繁体   English   中英

NHibernate-“ GenericADOException:无法执行查询”

[英]NHibernate - “GenericADOException: could not execute query”

当使用全文搜索进行搜索时,使用NHibernate v3.1.0.4000的生产环境突然开始出现此错误:

[SqlException(0x80131904):超时已过期。 操作完成之前超时的时间,或者服务器没有响应。] System.Data.SqlClient.SqlConnection.OnError(SqlException异常,布尔值BreakConnection)+404 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()+412系统.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)+1363 System.Data.SqlClient.SqlDataReader.ConsumeMetaData()+59 System.Data.SqlClient.SqlClient.SqlDataReader +118 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,字符串resetOptionsString)+6388257 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔型returnStream,布尔型异步数据+6389389 .SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔值returnStream,字符串方法,DbAsyncResul t结果)+538 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔型returnStream,String方法)+28 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior行为,String方法)+256 System.Data .SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior行为)+19 System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader()+23 NHibernate.AdoNet.AbstractBatcher.ExecuteReader(IDbCommand cmd)+845 NHibernate.Loader.Loader。 GetResultSet(IDbCommand st,布尔autoDiscoverTypes,布尔可调用,RowSelection选择,ISessionImplementor会话)+580 NHibernate.Loader.Loader.DoQuery(ISessionImplementor会话,QueryParameters queryParameters,布尔returnProxies)+275 NHibernate.Loader.Loader.DoQueryAndInitializeN( queryParameters,布尔型returnProxies)+205 NHibernate.Loader.Loader.DoList(ISessionImplementor会话,QueryParameters queryParamete rs)+195

[GenericADOException:无法执行查询[SELECT count(distinct this_.IdDocument)as y0_ FROM Document.Document this_内部连接Document.DocumentCopy在this_.IdDocument = documentc1_.IdDocument WHERE上((@@ p0 = @ p1并包含(this_。标题@ p2))和this_.IsDeleted = @ p3)和((((@ p4 = @ p5和documentc1_.CreationDate> = @ p6)和documentc1_.CreationDate <= @ p7)和(documentc1_.IdOwnedByGroup = @ p8或documentc1_.IdCreatedByGroup = @ p9)))位置参数:#0> 0#1> 0#2>“ýÿýÿýÿýÿýÿýÿýÿýÿ*”#3> False#4> 0#5> 0#6> 12/5/2015 12:00 :00下午#7> 12/5/2016 11:59:00下午#8> 1#9> 1 [SQL:SELECT count(distingt this_.IdDocument)as y0_ FROM Document.Document this_ inner join Document.DocumentCopy documentc1_ on this_.IdDocument = documentc1_.IdDocument在哪里((@ p0 = @ p1并包含(this_.Title,@ p2))和this_.IsDeleted = @ p3)和((((@ p4 = @ p5和documentc1_.CreationDate> = @ p6)和documentc1_.CreationDate <= @ p7)和(documentc1_.IdOwnedByGroup = @ p8 o r documentc1_.IdCreatedByGroup = @ p9))]] NHibernate.Loader.Loader.DoList(ISessionImplementor会话,QueryParameters queryParameters)+637 NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor会话,QueryParameters queryParameters)+23 NHibernate.LoaderCerteria .List(ISessionImplementor会话)+60 NHibernate.Impl.SessionImpl.List(CriteriaImpl标准,IList结果)+1025 NHibernate.Impl.CriteriaImpl.List(IList结果)+63 NHibernate.Impl.CriteriaImpl.UniqueResult()+57域。 Repositories.DocumentRepository.Domain.Abstract.IDocumentRepository.GetAll(条件1 criteria, Int32& count, Dictionary 2 openFieldCriteria)+272 ServicesImplementation.DocumentService.GetDocuments(条件1 criteria, Int32& count, String metadataSearchTerm) +510 Docman.Models.List.ListModel.GetDocuments(Int32& count) +102 ASP._Page_Views_List_Index_cshtml.Execute() in d:\\wwwroot\\inetpub\\docman\\Views\\List\\Index.cshtml:27 System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +280 System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +104 System.Web.WebPages.StartPage.ExecutePageHierarchy() +143 System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +157 System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +384 System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +33 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func 1 criteria, Int32& count, String metadataSearchTerm) +510 Docman.Models.List.ListModel.GetDocuments(Int32& count) +102 ASP._Page_Views_List_Index_cshtml.Execute() in d:\\wwwroot\\inetpub\\docman\\Views\\List\\Index.cshtml:27 System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +280 System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +104 System.Web.WebPages.StartPage.ExecutePageHierarchy() +143 System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +157 System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +384 System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +33 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func 1延续)+826372 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext,IList`1过滤器,ActionResult actionResult)+265 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext,字符串actionName)+827248 System.Web.Mvc。 Controller.ExecuteCore()+159 System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)+335 System.Web.Mvc。<> c__DisplayClassb.b__5()+62系统。 Web.Mvc.Async。<> c__DisplayClass1.b__0()+20 System.Web.Mvc。<> c__DisplayClasse.b__d()+54 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+469系统.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔值并已同步完成)+375

我已经在SSMS上尝试了上面列出的查询,它似乎运行良好且快速。

这里提到了类似的错误: Nhibernate FieldNameLookup抛出IndexOutOfRangeException ,尽管我的错误消息中没有包含任何IndexOutOfRangeException

谁能告诉我这可能是什么原因?

更新:

更多信息 :

我们正在使用投影。

根据错误日志,该错误源自某些查询,该查询仅返回一个计数,并且不包含具有许多字段的行。

就像我之前说过的一样,从SSMS运行相同的查询(在错误日志中列出)运行很快,没有任何问题。 但是,从应用程序执行该SQL查询的所有查询似乎都因上述错误而失败。

由于我们为NH使用了自定义包装,因此代码可能对您不清楚。

我认为我在异常顺序上是错误的,首先发生超时,然后ADO.net报告另一个错误。 所以,我想毕竟是一个超时...

更新2:

经过一些额外的研究,似乎这与此问题有关,并且查询确实超时了,而并非来自SSMS:

从Web执行时查询超时,但从SSMS执行时超快

事实证明这是一个超时,无法从SSMS中重现,因为它为ARITHABORT使用了一个不同的值(在我的应用程序会话和SSMS会话之间)。

将数据库的默认值设置为ON / 1 ,所有问题均已修复:

USE [master];
GO
ALTER DATABASE [{database_name}] SET ARITHABORT ON WITH NO_WAIT;
GO

看到这里: https : //dba.stackexchange.com/a/95090/71232

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM