SqlDataReader 获取存储过程返回值
编写存储过程,获取不到返回值
附上代码:
SqlDataReader reader = null;//
totalRecords = ;
try
{
SqlConnectionHolder connection = null;
try
{
connection = SqlConnectionHelper.GetConnection(this._sqlConnectionString, true);
SqlCommand command = new SqlCommand("dbo.yourStoredProcedure", connection.Connection);//你的存储过程名称
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(this.CreateInputParam("@pageIndex", SqlDbType.Int, pageIndex));
command.Parameters.Add(this.CreateInputParam("@pageSize", SqlDbType.Int, pageSize)); SqlParameter parameter = new SqlParameter("@totalRecords", SqlDbType.Int);//返回值
parameter.Direction = ParameterDirection.ReturnValue;
command.Parameters.Add(parameter);
try
{
reader = command.ExecuteReader(CommandBehavior.SequentialAccess);
while (reader.Read())
{
data1 = reader.GetGuid(),
data1 = reader.GetInt32(),
}
}
finally
{
if (reader != null)
{
reader.Close();
}
/*注意:必须关闭reader后才可以读取到返回值*/
if ((parameter.Value != null) && (parameter.Value is int)) totalRecords = (int)parameter.Value;
}
return lists;
}
finally
{
if (connection != null)
{
connection.Close();
connection = null;
}
}
}
catch (Exception ex)
{
throw;
}
获取不到返回值原因分析:
只有SqlDataReader关闭(即调用Close方法),才能对SqlConnection执行其它操作,如获取输出参数的值、返回值和 RecordsAffected。
详细参考MSDN文档如下:
1.SqlDataReader创建
若要创建 SqlDataReader,必须调用 SqlCommand 对象的 ExecuteReader 方法,而不要直接使用构造函数。
2.SqlDataReader使用
对于每个关联的 SqlConnection,一次只能打开一个 SqlDataReader,在第一个关闭之前,打开另一个的任何尝试都将失败。类似地,在使用 SqlDataReader 时,关联的 SqlConnection 正忙于为它提供服务,直到调用 Close 时为止。除非调用 SqlDataReader 的 Close 方法,否则会一直处于此状态。例如,在调用 Close 之前,无法检索输出参数。
SqlDataReader 的用户可能会看到在读取数据时另一进程或线程对结果集所做的更改。但是,确切的行为与执行时间有关。
当 SqlDataReader 关闭后,只能调用 IsClosed 和 RecordsAffected 属性。尽管当 SqlDataReader 存在时可以访问 RecordsAffected 属性,但是请始终在返回 RecordsAffected 的值之前调用 Close,以保证返回精确的。
Close 方法填写输出参数的值、返回值和 RecordsAffected,从而增加了关闭用于处理大型或复杂查询的 SqlDataReader 所用的时间。如果返回值和查询影响的记录的数量不重要,则可以在调用 Close 方法前调用关联的 SqlCommand 对象的 Cancel 方法,从而减少关闭 SqlDataReader 所需的时间
参考文档:来自MSDN http://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqldatareader.close(v=vs.85).aspx
SqlDataReader 获取存储过程返回值的更多相关文章
- C# 获取 存储过程 返回值
C#获取存储过程的返回值,这一方法,总是容易忘,今天给贴出来,以方便下次使用 存储过程: CREATE PROCEDURE [dbo].[Proc_GetInfo] ), ) out ...
- 再论c#获取存储过程返回值(包括SqlSugar)
其实这个问题好多年以前研究过: https://blog.csdn.net/xpnew/article/details/6909902 最近因为需要统计日结月结,给同事写了一套调用存储过程的代码.同时 ...
- C#获取存储过程返回值和输出参数值的方法
//转自网络,先留个底 1.获取Return返回值 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @ ...
- 【转】SQL SERVER 获取存储过程返回值
1.OUPUT参数返回值 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_buyerid int , @o_id bigint OUTPUT ) AS BEG ...
- EF中执行存储过程,获取output返回值
EF不能直接支持执行存储过程,于是使用转化成执行SQL语句的形式,却怎么也获取不到output的值,折腾的好久,终于解决了,分享下曲折的经历: public int AddVote(int title ...
- SQL存储过程返回值
1 SQL存储过程返回值有3种 1.1 直接return返回(例如 return 1): 1.2 通过参数output返回(例如字符串类型): 1.3 直接返回程序集(Dataset程序集). 2 用 ...
- Python从线程获取函数返回值
Python中利用强大的threading模块可以很容易的实现多线程开发,提高运行速度.这一般是对某个进行大量计算操作的的函数进行多线程处理,然后合并各线程的结果.获取函数返回值的方法可以如下: 1) ...
- Ksoap2 获取webservice返回值的getResponse() 出现的问题
今天写了一个判断记录重复的webservcie 返回布尔类型 // 判断序列号在数据库是否重复 public static boolean isSerialNumExist(String serial ...
- PHP获取函数返回值的引用
通过在函数前添加&可以获取函数返回值的引用,如:function &test(){return 10;}
随机推荐
- python运维开发(十八)----Django(二)
内容目录 路由系统 模版 Ajax model数据库操作,ORM 路由系统 django中的路由系统和其他语言的框架有所不同,在django中每一个请求的url都要有一条路由映射,这样才能将请求交给对 ...
- C/C++语言学习——内存分配管理
1.一个由C编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.程序结束时由编译器自动释放. ...
- unzip解压中文文件名乱码
由于中文的Windows使用的是GBK编码,而Linux默认使用UTF-8编码的,如果在Windows打包带中文文件的zip包,则这个zip包在Linux下面使用默认的归档管理器打开这个zip包的时候 ...
- 外贸中MFQ
MFQ = Mask Fee Quantity 退掩膜费量Masking charge USD 2000. MFQ 100k in the first year
- 主要协议SCSI、FC、iSCSI
一.SCSI SCSI是小型计算机系统接口(Small Computer System Interface)的简称,于1979首次提出,是为小型机研制的一种接口技术,现在已完全普及到了小型机,高低端服 ...
- 将QT开发的界面程序封装成DLL,在VC中成功调用
最近手头的一个项目需要做一个QT界面,并且封装成DLL,然后再动态调用DLL给出的接口函数,使封装在DLL内部的QT界面跑起来,在网上查了很多资料,今天终于成功了,经验不敢独享,因为CSDN给了我很多 ...
- WPF笔记(2.7 文字布局)——Layout
原文:WPF笔记(2.7 文字布局)--Layout 这一节介绍的是文字布局的几个控件:1.TextBlock 最基本的文字控件可以配置5个Font属性.TextWraping属性,&quo ...
- Linux和windows动态库
转载:http://www.cnblogs.com/chio/archive/2008/11/13/1333119.html 态链接库技术实现和设计程序常用的技术,在Windows和Linux系 统中 ...
- MIT-scheme安装
下载地址: http://www.gnu.org/software/mit-scheme/ 下载windows版本,安装. The MIT-Scheme can be installed by jus ...
- PHP 表单验证 - 验证 E-mail 和 URL
----------------------------------------------------------------------------- 本节展示如何验证名字.电邮和 URL. -- ...