编写存储过程,获取不到返回值

附上代码:

  1. SqlDataReader reader = null;//
  2. totalRecords = ;
  3. try
  4. {
  5. SqlConnectionHolder connection = null;
  6. try
  7. {
  8. connection = SqlConnectionHelper.GetConnection(this._sqlConnectionString, true);
  9. SqlCommand command = new SqlCommand("dbo.yourStoredProcedure", connection.Connection);//你的存储过程名称
  10. command.CommandType = CommandType.StoredProcedure;
  11. command.Parameters.Add(this.CreateInputParam("@pageIndex", SqlDbType.Int, pageIndex));
  12. command.Parameters.Add(this.CreateInputParam("@pageSize", SqlDbType.Int, pageSize));
  13.  
  14. SqlParameter parameter = new SqlParameter("@totalRecords", SqlDbType.Int);//返回值
  15. parameter.Direction = ParameterDirection.ReturnValue;
  16. command.Parameters.Add(parameter);
  17. try
  18. {
  19. reader = command.ExecuteReader(CommandBehavior.SequentialAccess);
  20. while (reader.Read())
  21. {
  22. data1 = reader.GetGuid(),
  23. data1 = reader.GetInt32(),
  24. }
  25. }
  26. finally
  27. {
  28. if (reader != null)
  29. {
  30. reader.Close();
  31. }
  32. /*注意:必须关闭reader后才可以读取到返回值*/
  33. if ((parameter.Value != null) && (parameter.Value is int)) totalRecords = (int)parameter.Value;
  34. }
  35. return lists;
  36. }
  37. finally
  38. {
  39. if (connection != null)
  40. {
  41. connection.Close();
  42. connection = null;
  43. }
  44. }
  45. }
  46. catch (Exception ex)
  47. {
  48. throw;
  49. }

获取不到返回值原因分析:
只有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 获取存储过程返回值的更多相关文章

  1. C# 获取 存储过程 返回值

    C#获取存储过程的返回值,这一方法,总是容易忘,今天给贴出来,以方便下次使用 存储过程: CREATE  PROCEDURE [dbo].[Proc_GetInfo]     ),     ) out ...

  2. 再论c#获取存储过程返回值(包括SqlSugar)

    其实这个问题好多年以前研究过: https://blog.csdn.net/xpnew/article/details/6909902 最近因为需要统计日结月结,给同事写了一套调用存储过程的代码.同时 ...

  3. C#获取存储过程返回值和输出参数值的方法

    //转自网络,先留个底 1.获取Return返回值 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @ ...

  4. 【转】SQL SERVER 获取存储过程返回值

    1.OUPUT参数返回值 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_buyerid int , @o_id bigint OUTPUT ) AS BEG ...

  5. EF中执行存储过程,获取output返回值

    EF不能直接支持执行存储过程,于是使用转化成执行SQL语句的形式,却怎么也获取不到output的值,折腾的好久,终于解决了,分享下曲折的经历: public int AddVote(int title ...

  6. SQL存储过程返回值

    1 SQL存储过程返回值有3种 1.1 直接return返回(例如 return 1): 1.2 通过参数output返回(例如字符串类型): 1.3 直接返回程序集(Dataset程序集). 2 用 ...

  7. Python从线程获取函数返回值

    Python中利用强大的threading模块可以很容易的实现多线程开发,提高运行速度.这一般是对某个进行大量计算操作的的函数进行多线程处理,然后合并各线程的结果.获取函数返回值的方法可以如下: 1) ...

  8. Ksoap2 获取webservice返回值的getResponse() 出现的问题

    今天写了一个判断记录重复的webservcie 返回布尔类型 // 判断序列号在数据库是否重复 public static boolean isSerialNumExist(String serial ...

  9. PHP获取函数返回值的引用

    通过在函数前添加&可以获取函数返回值的引用,如:function &test(){return 10;}

随机推荐

  1. php 实现传入参数的传出

    类似于.net的out功能,php中可以使用&实现 如下示例: <?php$x=2; inOutFunction($x); function inOutFunction(&$x) ...

  2. mysql之7xtrabackup

    目录: 1.前言 2.环境 3.开始备份 3.1.innobackupex介绍 3.2.一次完全备份 3.3.一次完全恢复 3.4.增量备份 3.5.增量备份的恢复过程 1.前言: Xtrabacku ...

  3. 1008 Gnome Tetravex

    练习使用DPS的题,不知道有无别的做法,思路不复杂.形式是统计并且进行数字配对. #include <stdio.h> ][],note[],ans[]; void ini(){ int ...

  4. linux----ulimit 限制

    ulimit -a 显示当前用户的各种限制. ulimit -n 的数值表示每个进程可以打开的文件数目. 一般情况下, ulimit -n 的数值是1024. 当进程打开的文件数目超过此限制时,该进程 ...

  5. 在linux中配置tomcat

    Linux下Tomcat的安装配置 一.下载安装对应的jdk,并配置Java环境. 官网下载地址: http://www.oracle.com/technetwork/java/javase/down ...

  6. Blog透视镜

    Blog透视镜,提供了Blog代码示例,文章和教程,可以帮助你建置博客. 网站名称:Blog透视镜 网站地址:http://blog.openyu.org

  7. Qt 文件搜索(写入文本文件)

    代码无意间在网上找到,下载回来后改了几个格式,编译后经测试可以正常使用,这个个文件搜索的很好的例子,有两种搜索方式:一种是按文件名作为关键字进行搜索,一种是以文档中所包含的关键字进行搜索,贴两张图先: ...

  8. relative与absolute相结合

    relative会把别人挤下去, absolute会跑偏. 两者结合就会很好的解决问题. <span class='pic_selected' style='position:relative; ...

  9. 一起来学canvas (前言)

    codeyy - 一依丫丫 一起来学canvas (前言)

  10. 只允许指定IP访问指定端口 ufw

    那天工作需要在服务器上指定ip才可以访问指定端口,配置命令如下: (服务器是ubuntu 14.04系统) apt-get install ufw ufw enable ufw default den ...