为什么SqlDataReader调用Stored Procedure的结果同直接执行Stored Procedure的结果不一样?
前几天有人报告说我们的网站页面出问题了,数据显示不对。
我看了一下,那个页面使用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的结果不一样?
谢谢!
我看了一下,那个页面使用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的结果不一样?
谢谢!
...全文
相关推荐
学习使用存储过程(Stored Procedure)
### 为什么使用存储过程?1. **性能提升**:由于存储过程在数据库服务器上编译一次后即可多次调用,因此执行效率高于临时编写的SQL语句。2.
sybase stored procedure
在性能方面,存储过程的预编译特性使其比直接执行单个 SQL 语句更高效。当存储过程首次被调用时,其 SQL 语句会被解析并生成执行计划。后续调用会直接使用这个执行计划,减少了解析的时间。
存储过程(Stored Procedure)
### 存储过程(Stored Procedure)详解#### 一、存储过程的概念与作用存储过程是一种预先编写并编译好的SQL语句集合,通常用于实现特定的数据库操作或逻辑处理。
一个基于ADO.NET+COBOL+Stored Procedure的程序例子代码
执行命令:调用SqlCommand的ExecuteNonQuery或ExecuteReader方法,根据Stored Procedure是否返回结果集来选择合适的方法。5.
mysql stored procedure programming PDF
与直接在应用程序代码中执行SQL语句相比,存储过程提供了一系列的优势,包括数据处理的安全性、代码的重用性和执行效率。在给定的文件信息中,提到了一本关于MySQL存储过程编程的PDF书籍。


