Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net SqlDataReader挂起GetValue()方法和SNIReadSyncOverAsync_.net_Sql Server_Sqldatareader_Sqlclient_Executereader - Fatal编程技术网

.net SqlDataReader挂起GetValue()方法和SNIReadSyncOverAsync

.net SqlDataReader挂起GetValue()方法和SNIReadSyncOverAsync,.net,sql-server,sqldatareader,sqlclient,executereader,.net,Sql Server,Sqldatareader,Sqlclient,Executereader,我们手头有一个非常奇怪的问题。.Net SqlDataReader对象在读取GetValue()方法上的值时被卡住。没有例外,它的超时时间至少不超过10分钟,这是非常长的时间。超过10分钟后,它抛出以下错误: 一般例外-!ET:SqlException{CRLF}!M:超时过期了。这个 在完成操作之前经过的超时时间或 服务器没有响应。{CRLF}一般异常- !ET:Win32Exception{CRLF}!M:等待操作超时{CRLF} 通过进程转储获得的堆栈跟踪 00000000 1B2EE6F

我们手头有一个非常奇怪的问题。.Net SqlDataReader对象在读取GetValue()方法上的值时被卡住。没有例外,它的超时时间至少不超过10分钟,这是非常长的时间。超过10分钟后,它抛出以下错误:

一般例外-!ET:SqlException{CRLF}!M:超时过期了。这个 在完成操作之前经过的超时时间或 服务器没有响应。{CRLF}一般异常- !ET:Win32Exception{CRLF}!M:等待操作超时{CRLF}

通过进程转储获得的堆栈跟踪

00000000 1B2EE6F8 00000000 76EABE7A[内部调用框架:00000000 1B2EE6F8] .SNIReadSyncOverAsync(SNI_ConnWrapper*,SNI_数据包**,Int32) 00000000 1B2EE6F8 000007fef35a3ab1[内嵌调用框架:00000000 1B2EE6F8] .SNIReadSyncOverAsync(SNI_ConnWrapper*,SNI_数据包**,Int32) 00000000 1B2EE6D000000 7FEF35A3AB1 DomainBoundILStubClass.IL_STUB_PInvoke(SNI_ConnWrapper*,SNI_Packet**, Int32)00000000 1B2EE7A0000007FEF358A35F SNINativeMethodWrapper.SniReadSyncOverSync(System.Runtime.InteropServices.SafeHandle, IntPtr ByRef,Int32)00000000 1B2EE810000007 FEF358A07E System.Data.SqlClient.TdsParserStateObject.ReadsInSyncOverAsync() 00000000 1B2EE8C0000007 FEF3589F90 System.Data.SqlClient.TdsParserStateObject.TryReadNetworkPacket() 00000000 1B2EE900 000007 FEF358A760 System.Data.SqlClient.TdsParserStateObject.TryPrepareBuffer() 00000000 1B2EE930 000007 FEF358D8CB System.Data.SqlClient.TdsParser.TryGetTokenLength(字节, System.Data.SqlClient.TdsParserStateObject,Int32 ByRef) 00000000 1B2EE980 00000 7FEF359DE78 System.Data.SqlClient.TdsParser.TryGetDataLength(System.Data.SqlClient.SqlMetaDataPriv, System.Data.SqlClient.TdsParserStateObject,UInt64 ByRef) 00000000 1B2EE9C0000007 FEF359DCE3 System.Data.SqlClient.TdsParser.tryprocessColumnHeaderOnBC(System.Data.SqlClient.SqlMetaDataPriv, System.Data.SqlClient.TdsParserStateObject,布尔ByRef,UInt64 ByRef)00000000 1B2 EA40 00000 7FEF359DA4C System.Data.SqlClient.SqlDataReader.TryReadColumnInternal(Int32, 布尔值)00000000 1B2EEE0 00000 7FEF359D900 System.Data.SqlClient.SqlDataReader.TryReadColumn(Int32,布尔, 布尔值)00000000 1B2 EB50 000007 FEF359D81B System.Data.SqlClient.SqlDataReader.GetValueInternal(Int32) 00000000 1B2EB90 00000 7FEF359D7C7 System.Data.SqlClient.SqlDataReader.GetValue(Int32)

这肯定不是一个数据库锁定问题,因为我们观察到它通过了ExecuteReader()方法。我们还可以在SQL事件探查器中看到原始命令已成功完成。只有在遍历记录和读取值时,它才会被卡住。这种情况每10-15天随机发生一次

以前有人遇到过这样的问题吗?原因可能是什么


我已经说过了,但它没有提供解决方案。这可能是网络连接问题吗?为什么它没有超时?

仍在寻找答案……不管阻塞SqlDataReader的问题是什么,我最关心的是为什么它没有超时。它阻塞了单个线程,从而阻塞了整个应用程序。您是如何发现并修复这个问题的?