在上一篇随笔:SqlDataReader读取分页数据,pageCount你是肿么了?

遇到了很让人头疼的问题:SqlDataReader执行带输出参数的存储过程总是获取不到输出参数的正确值。这里将解决办法及分析过程列出,为遇到相同问题的小伙伴提供一种解决方案。

在SqlDataReader读取分页数据,pageCount你是肿么了?的评论中有博友提出将

param[2].Direction = ParameterDirection.Output;

该句代码放在执行查询前,确实有这一部分原因。按照该博友提供的方式我尝试了,但仍有问题:

 1  param[2].Direction = ParameterDirection.Output;
 2             using (SqlDataReader reader = SQLHelper.ExecuteReader(sql, CommandType.StoredProcedure, param))
 3             {
 4
 5                 while (reader.Read())
 6                 {
 7                     list.Add(ConvertReaderToStudentModel(reader));
 8                 }
 9             }
10             //为输出参数赋值
11             pageCount = (int)param[2].Value;

报错:

出现这种原因,首犯肯定是param为空了,是什么原因导致的呢?

经调试发现罪魁祸首原来在SQLHelper中

在执行前 cmd.Parameters.Clear();

执行后:

DbParameterCollention的Count为0,也就是集合中没有要加的参数了,所以出现“未将对象引用设置为对象的实例”的错误。

知道原因错在什么地方了,就知道怎么改了。将该句注释,就能得到输出参数的值了。

结果:

但网上很多SQLHelper很多都有把参数情况的,难道以后遇到这样的情况就要修改SQLHelper,肯定不行,遇到这种执行带输出参数的存储过程,还是用DataSet比较好,总之各有各的好处。

这个问题折磨了我一星期了,今天终于解决了,很开心。

突然想到一句话,分享一下:"学习不以分享为目的,就是耍流氓......";

转载于:https://www.cnblogs.com/wolf-sun/p/3306113.html

SqlDataReader执行带输出参数存储过程 错误分析相关推荐

  1. SQL SERVER 存储过程执行带输出参数的SQL语句拼接

    注意:定义的要执行的SQL语句必须是nvarchar类型 CREATE PROC P_BranchOrderSalesStatistics @beginTime DateTime, --开始时间 @e ...

  2. C#里调用带输出参数的存储过程

    C#里调用带输出参数的存储过程  1using System;  2using System.Collections.Generic;  3using System.Linq;  4using Sys ...

  3. C#调用存储过程带输出参数或返回值分类(转)

    C#调用存储过程带输出参数或返回值 分类: Asp.net MSSQL2014-05-26 14:02 330人阅读 评论(0) 收藏 举报 [csharp] view plaincopyprint? ...

  4. 执行带返回参数的存储过程

    执行带返回参数的存储过程: create procedure @Url nvarhcar(255), @returnName nvarchar(50) output as select top 1 @ ...

  5. oracle接收输入参数,Oracle带输入输出参数存储过程(包括sql分页功能)

    记录一下,免得以后忘记了又要到处去找. begin /*这里不能直接执行select语句但可以直接执行update.delete.insert语句*/ end里面不能接执行select语句,声明会话级 ...

  6. 在asp中怎么调用带输出参数的存储过程

    这是我写的存储过程 CREATE proc hz @count2 bigint output, @minsl varchar, @maxsl varchar as create table #tmp( ...

  7. oracle带输出参数存储,oracle带输入输出参数存储过程(包括sql分页功能)

    记录一下,免得以后忘记了又要到处去找. begin /*这里不能直接执行select语句但可以直接执行update.delete.insert语句*/ end里面不能接执行select语句,声明会话级 ...

  8. mybatis mysql 存储过程传入对象_mybatis 调用mysql存储过程 带输出输入参数

    首先感谢网络上以为朋友.其实我不认识.看到他的博客才做出来. http://lohasle.iteye.com/blog/1669879 他的地址.下面的是我一些简单拓展的 ? ? 存储过程都是一样的 ...

  9. 带有无参数的存储过程

    SQL中调用存储过程语句:call procedure_name(); 注:调用时"()"是不可少的,无论是有参数还是无参数. 定义对数据库存储过程的调用时 1.无参数存储过程:{ ...

最新文章

  1. java 二叉树中和为某一值的路径_25. 二叉树中和为某一值的路径
  2. Linux下stat + 文件名后, Access,Modify,Change的含义
  3. 招聘|腾讯地图平台部招点云算法工程师
  4. 低潮过后,未来医疗可穿戴市场将如何发展?
  5. 不懂技术的人请不要对懂技术的人说这很容易
  6. 【转】storm 开发系列一 第一个程序
  7. Linux——进程管理
  8. jdk卸载不干净怎么办_雨刮器“刮不干净”怎么办?老司机:用这招,分分钟解决!...
  9. 传Facebook将推出应用中心挑战谷歌搜索地位
  10. 使用Mybatis Generator结合Ant脚本快速自动生成Model、Mapper等文件的方法
  11. PHP下用Memcache 实现消息队列
  12. 大数据开发笔记(八):Sparkstreaming
  13. linux网络 (二):无线网络操作
  14. Axure share 二三事
  15. java 调查问卷_java学习调查问卷
  16. VUE项目开发的完整流程
  17. 帝国PHP二次开发,帝国CMS二次开发有哪些注意事项
  18. 【离散数学】第二章 命题逻辑的推理理论
  19. 用python画一个机器猫歌词_用Python语言模型和LSTM做一个Drake饶舌歌词生成器
  20. 相忘于江湖—记一位朋友

热门文章

  1. python简单还是c简单_Python与C的简单比较(Python3.0)
  2. vba 根据分辨率 缩放显示比例_【显示百闻录】第一讲:关于屏幕尺寸、比例以及分辨率...
  3. 【FPGA】Spartan-6的时钟管理器(CMT)
  4. (转载)keras使用入门及3D卷积神经网络资源
  5. 《HTML、CSS、JavaScript 网页制作从入门到精通》——6.6 单元格属性
  6. “卖我一枝笔”:如何史蒂夫·乔布斯将这一经典问题作出回应?
  7. Java 利用replaceAll 替换中括号
  8. 怎样测试运算放大器的输入失调电压?
  9. 大学最重要的七项学习
  10. 建空列表list,数组array,矩阵matrix