SqlDataReader执行带输出参数存储过程 错误分析
在上一篇随笔:SqlDataReader读取分页数据,pageCount你是肿么了?
遇到了很让人头疼的问题:SqlDataReader执行带输出参数的存储过程总是获取不到输出参数的正确值。这里将解决办法及分析过程列出,为遇到相同问题的小伙伴提供一种解决方案。
在SqlDataReader读取分页数据,pageCount你是肿么了?的评论中有博友提出将
param[].Direction = ParameterDirection.Output;
该句代码放在执行查询前,确实有这一部分原因。按照该博友提供的方式我尝试了,但仍有问题:
param[].Direction = ParameterDirection.Output;
using (SqlDataReader reader = SQLHelper.ExecuteReader(sql, CommandType.StoredProcedure, param))
{ while (reader.Read())
{
list.Add(ConvertReaderToStudentModel(reader));
}
}
//为输出参数赋值
pageCount = (int)param[].Value;
报错:
出现这种原因,首犯肯定是param为空了,是什么原因导致的呢?
经调试发现罪魁祸首原来在SQLHelper中
在执行前 cmd.Parameters.Clear();
执行后:
DbParameterCollention的Count为0,也就是集合中没有要加的参数了,所以出现“未将对象引用设置为对象的实例”的错误。
知道原因错在什么地方了,就知道怎么改了。将该句注释,就能得到输出参数的值了。
结果:
但网上很多SQLHelper很多都有把参数情况的,难道以后遇到这样的情况就要修改SQLHelper,肯定不行,遇到这种执行带输出参数的存储过程,还是用DataSet比较好,总之各有各的好处。
这个问题折磨了我一星期了,今天终于解决了,很开心。
突然想到一句话,分享一下:"学习不以分享为目的,就是耍流氓......";
SqlDataReader执行带输出参数存储过程 错误分析的更多相关文章
- EF执行存储过程(带输出参数)
1.不含动态sql.带输出参数存储过程调用实例 1.存储过程代码: 2.EF自动生成代码(包括对应ObjectResult的实体模型): 3.调用存储过程代码实例: 总结: ObjectParam ...
- EF(ServerFirst)执行存储过程实例1(带输出参数)
1.不含动态sql.带输出参数存储过程调用实例 a.存储过程代码: b.EF自动生成代码(包括对应ObjectResult的实体模型): c.调用存储过程代码实例: 总结: ObjectParame ...
- sqlserver 带输出参数的存储过程的创建与执行
创建 use StudentManager go if exists(select * from sysobjects where name='usp_ScoreQuery4') drop proce ...
- C#调用存储过程带输出参数或返回值
CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(8), @studentname nvarchar(50) OUTPUT AS BEGI ...
- [转] ADO.NET调用存储过程带输出参数或返回值
CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(), @studentname nvarchar() OUTPUT AS BEGIN S ...
- c#调用带输出参数的存储过程
sql server中编写一个存储过程: CREATE PROCEDURE ProGetPWD @username varchar(20), @password varchar(20) OUTPUT ...
- ExecuteReader在执行有输出参数的存储过程时拿不到输出参数
异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html 后期会在博客首发更新:http://dnt.dkill.net/Article/D ...
- sqlserver 带输出参数的存储过程
--创建存储过程create procedure proc_stu@sname varchar(20),@pwd varchar(50),@flag bit outputasif exists(sel ...
- sqlserver 存储过程 带输出参数
CREATE PROCEDURE [dbo].[output] @acctNbr varchar(), --会员卡号 @acctPwd1 nvarchar() OUT, --登录密码 @acctPwd ...
随机推荐
- 20145233韩昊辰 《Java程序设计》实验报告一:Java开发环境的熟悉(Windows+IDEA)
20145233 <Java程序设计>实验报告一:Java开发环境的熟悉 实验要求 使用JDK编译.运行简单的Java程序: 使用IDEA 编辑.编译.运行.调试Java程序. 实验内容 ...
- C#基础之内存分配
1.创建一个对象 一个对象的创建过程主要分为内存分配和初始化两个环节.在.NET中CLR管理的内存区域主要有三部分:栈.GC堆.LOH堆,栈主要用来分配值类型数据.它的管理是有系统控制的,而不是像GC ...
- SDAccel-FPGA将带来至多25倍单位功耗性能提升
很久没有看FPGA了,本来想继续学习HLS,就上Xilinx的网站看了看.结果发现了SDx 开发环境,很新的一个东西.由于我对这方面了解不多,本篇博文仅仅只是资料的整合和介绍. 1.SDx开发环境 X ...
- 基于DDD的.NET开发框架 - ABP初探
返回ABP系列 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应 ...
- Android实现两个ScrollView互相联动,同步滚动的效果
公众号:smart_android 作者:loonggg 点击"阅读原文",可查看更多内容和干货 最近在做一个项目,用到了两个ScrollView互相联动的效果,简单来说联动效果意 ...
- Ajax在调用含有SoapHeader的webservice方法
· [WebService(Namespace = "http://tempuri.org/")] · [WebServiceBinding ...
- Shadowsock搭建
搭建Shadowsocks服务端: 搭建Shadowsocks之前首先必须购买一个VPS.一般VPS提供商会给一个测试地址,购买之前最好先ping一下速度.也可以通过以下网址测试下vps网络速度: h ...
- .net,微软,薪资及其他
很久没在博客园上写些东西,因为我的确没有什么技术上面新奇的心得和大家分享,园子里面的文章页没啥看的,基本就是看一下业界新闻,因为这里面99%的东西没什么看头,更像是个人技术笔记汇总. 我从07年从de ...
- SequoiaDB 系列之七 :源码分析之catalog节点
这一篇紧接着上一篇SequoiaDB 系列之六 :源码分析之coord节点来讲 在上一篇中,分析了coord转发数据包到catalog节点(也有可能是data节点,视情况而定).这一次,我们继续分析上 ...
- Yii2结合webuploader实现图片上传
js中 uploader = WebUploader.create({ // 自动上传. auto : true, // swf文件路径 swf : 'webuploader/Uploader.swf ...