前几天有人报告说我们的网站页面出问题了,数据显示不对。
我看了一下,那个页面使用ADO.NET调用Stored Procedure,返回一个SqlDataReader,然后将返回的记录显示在页面上。
我在SQL Server Management Studio里运行这个存储过程,返回的记录数和内容都没问题。
我们曾经给这个数据库做过一个备份,连在开发环境上作为开发数据库(在同一个服务器上)。本地运行没有问题。这个页面已经运行了很多年,相关程序和存储过程从来没动过,
完全一样。
于是我把本地程序的连接字符串指向出错online数据库,页面数据仍然是错的。
后来我追踪程序的执行,发现
SqlDataReader返回的记录比在SQL Server Management Studio里运行这个存储过程的记录少好几条。
我看到一个英文网页(
这里)上建议,在存储过程最后删除临时表。我们这个存储过程里用了三个临时表,最后只删除了两个,因此我就加了一句,DROP TABLE #tree,问题就解决了。
同事对我说,你再把加的那个语句删除试试。于是我去除了那句DROP TABLE #tree,结果依然正确。
我们的分析是,
重新编译那个Stored Procedure就好了,同删除临时表没什么关系。
请问各位高手,这是什么原因?
为什么SqlDataReader调用Stored Procedure的结果同直接执行Stored Procedure的结果不一样?
谢谢!