为什么SqlDataReader调用Stored Procedure的结果同直接执行Stored Procedure的结果不一样?

来自故乡的风 2016-03-11 04:55:24
前几天有人报告说我们的网站页面出问题了,数据显示不对。

我看了一下,那个页面使用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的结果不一样?

谢谢!
...全文
190 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋的红果实 2016-03-11
  • 打赏
  • 举报
回复
原理上讲,临时表会自动删除,不需要显示执行drop table #tablename,关键是你加了这条会使sql重新编译储存过程
来自故乡的风 2016-03-11
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
一个#的临时表只在一次访问内有效,难道是你们的数据库自身出问题了?不会自动清除临时表?估计你得到sql版块去验证下
多谢 starfd! (1)程序和数据库很长时间没作改动,一直运行正常。 (2)其它页面数据显示完全正常,只有这一个出错。 (3)将原来那个stored procedure 重新编译一下就好了。 老板问为什么出错,怎样防范。我现在只能回答“不清楚”。
  • 打赏
  • 举报
回复
一个#的临时表只在一次访问内有效,难道是你们的数据库自身出问题了?不会自动清除临时表?估计你得到sql版块去验证下

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧