Vb.net System.Data.SqlClient.SqlException(0x80131904)

Vb.net System.Data.SqlClient.SqlException(0x80131904),vb.net,Vb.net,我每天早上都会运行一个流程,遍历数千条记录,确定它们是否可以删除。我有时会在日志文件中看到此异常: System.Data.SqlClient.SqlException (0x80131904): A transport-level error has occurred when receiving results from the server. (provider: Session Provider, error: 19 - Physical connection is not usable

我每天早上都会运行一个流程,遍历数千条记录,确定它们是否可以删除。我有时会在日志文件中看到此异常:

System.Data.SqlClient.SqlException (0x80131904): A transport-level error has occurred when receiving results from the server. (provider: Session Provider, error: 19 - Physical connection is not usable)
我在这里读到了一个潜在的解决方案:

我知道SQLDataReader类实现了IDisposable,如下所述:。因此,您应该使用语句将其包装起来,或者在完成后调用.close


如果你不打电话怎么办?关了吗?我不明白为什么会出现这种异常,因为我认为数据读取器只是从数据库返回并存储在内存中的对象的集合。

不,数据读取器不是对象的集合,它是一个顺序的单向适配器,用于访问返回查询中的记录+一些缓存机制。如果您要求读取100000条记录,但只需要1000条,那么其他99000条不会被返回。数字可能会因为缓存而关闭,所以它可能会读取比您需要的稍多的内容,因为它希望您最终读取所有内容,但这个想法是站得住脚的。当你要求更多的时候,它读得更多,而不是一下子读得更多。删除记录背后的逻辑是什么?您最好使用DELETE SQL查询,从性能角度考虑(并且没有泄漏)。最简单的解释是SQL server已重新启动。代码中的错误是您将连接保持得太长。请务必在开始之前创建连接,完成后处理/关闭连接。@Hans Passant,谢谢。现在几乎每天都会发生错误,我可以确认服务器肯定不会每天重新启动。我发现一个数据读取器未正确关闭(未包装在USING语句中)。我想这可能是原因吧?