首页 新闻 会员 周边

(老鸟求助)异步线程读取sqlserver数据库的数据老是出错,非常莫名其妙

0
悬赏园豆:40 [已关闭问题]

SELECT * FROM (
 SELECT M.*, [dbo].[fn_getFullRegionName_M](M.[Workplace]) AS [WorkplaceName], R.[Name],
     R.[Score], R.[LastModificationTime], UP.[TrueName], UP.[Sex], UP.[Birthday], UP.[HighestDegree], UP.[WorkExperience], 
        ROW_NUMBER() OVER(ORDER BY R.[LastModificationTime] DESC) AS _pos
        FROM [Personal].[JobApplication] M
        LEFT JOIN [Personal].[Resume] R ON R.[ResumeID] = M.[ResumeID]
        LEFT JOIN [Personal].[UserProfile] UP ON UP.[ResumeID] = M.[ResumeID]
        WHERE
        R.[IsActived] = 1 AND
        R.[FullLevel ] > 1
    ) AS sp
    WHERE _pos BETWEEN (@pageIndex-1) * @pageSize + 1 AND @pageIndex * @pageSize;

 

以上为要执行的语句,出现这样的错误:
System.Threading.ThreadAbortException: 正在中止线程。
   在 SNINativeMethodWrapper.SNIPacketGetConnection(IntPtr packet)
   在 System.Data.SqlClient.TdsParserStateObject.ProcessSniPacket(IntPtr packet, UInt32 error)
   在 System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
   在 System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
   在 System.Data.SqlClient.TdsParserStateObject.ReadBuffer()
   在 System.Data.SqlClient.TdsParserStateObject.ReadByteArray(Byte[] buff, Int32 offset, Int32 len)
   在 System.Data.SqlClient.TdsParserStateObject.ReadUInt32()
   在 System.Data.SqlClient.TdsParserStateObject.ReadPlpLength(Boolean returnPlpNullIfNull)
   在 System.Data.SqlClient.TdsParser.ReadPlpUnicodeChars(Char[]& buff, Int32 offst, Int32 len, TdsParserStateObject stateObj)
   在 System.Data.SqlClient.TdsParser.ReadSqlStringValue(SqlBuffer value, Byte type, Int32 length, Encoding encoding, Boolean isPlp, TdsParserStateObject stateObj)
   在 System.Data.SqlClient.TdsParser.ReadSqlValue(SqlBuffer value, SqlMetaDataPriv md, Int32 length, TdsParserStateObject stateObj)
   在 System.Data.SqlClient.SqlDataReader.ReadColumnData()
   在 System.Data.SqlClient.SqlDataReader.ReadColumn(Int32 i, Boolean setTimeout)
   在 System.Data.SqlClient.SqlDataReader.GetValueInternal(Int32 i)
   在 System.Data.SqlClient.SqlDataReader.GetValue(Int32 i)
   在 ZM.PH.MyLucene.FullIndexer.BeginLoadData() 位置 G:\ProgrammerHelper\PHSolution\MyLucene\Indexer\FullIndexer.cs:行号 88

运行环境:windows2003,iis6,asp.net .net framework 3.5。

奇怪的是,我在本地用winform程序调用该组件访问数据库却从没来没有出错过(异步),可以排除程序本身的问题。

本人在行内也呆了近七八年了,从未见过这样的错误,调试时发现出错的字段不尽相同,应该不是由于某一字段数据有问题造成。

有经验的同志帮忙看一下,谢了!

有容乃大的主页 有容乃大 | 初学一级 | 园豆:5
提问于:2010-01-11 00:10
< >
分享
其他回答(2)
0

这个问题很像是你的异步线程在执行SQL 过程中被其它线程调用 Thread.Abort 强行终止了。

补充回答:

我搜了一下,可能是 HTTP 访问超时后被强制终止执行了。

解决方案好像是修改 web.config 的 httpRuntime

参见下面链接,你可以照这个思路去研究研究,我时间有限,不能深入这个问题,抛砖引玉而已。

http://www.dnncreative.com/Forum/tabid/88/forumid/4/postid/2570/view/topic/Default.aspx

eaglet | 园豆:17139 (专家六级) | 2010-01-11 09:05
没有强制中止,但也不可能是GC强制回收啊。 大概执行100次能有一次成功。
支持(0) 反对(0) 有容乃大 | 园豆:5 (初学一级) | 2010-01-11 11:44
0

您好,首先说声对不起  我不是来回答问题的 。 但是看到您的标题  异步加载  我就来了 。

我想请问前辈您 怎么异步线程读取sqlserver数据库的数据。

谢谢了  我邮箱是: huanggreat@126.com  希望您能发段源码让我学习学习

再次感谢!

Yellows | 园豆:45 (初学一级) | 2010-01-11 10:52
在一个异步方法中读取数据。
支持(0) 反对(0) 有容乃大 | 园豆:5 (初学一级) | 2010-01-11 11:42
0

很可能是执行期间强行终止造成的。如果没有做任何操作,你断点检查一下吧,应该能找到原因。我不知道你代码怎么写的,不好分析了。

成斌 | 园豆:265 (菜鸟二级) | 2010-01-12 08:18
就是用企业库执行上面那段sql语句。
支持(0) 反对(0) 有容乃大 | 园豆:5 (初学一级) | 2010-01-12 10:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册