SqlDataReader执行带输出参数存储过程 错误分析
2013-09-06 21:02
791 查看
在上一篇随笔:SqlDataReader读取分页数据,pageCount你是肿么了?
遇到了很让人头疼的问题:SqlDataReader执行带输出参数的存储过程总是获取不到输出参数的正确值。这里将解决办法及分析过程列出,为遇到相同问题的小伙伴提供一种解决方案。
在SqlDataReader读取分页数据,pageCount你是肿么了?的评论中有博友提出将
该句代码放在执行查询前,确实有这一部分原因。按照该博友提供的方式我尝试了,但仍有问题:
报错:
出现这种原因,首犯肯定是param为空了,是什么原因导致的呢?
经调试发现罪魁祸首原来在SQLHelper中
在执行前 cmd.Parameters.Clear();
执行后:
DbParameterCollention的Count为0,也就是集合中没有要加的参数了,所以出现“未将对象引用设置为对象的实例”的错误。
知道原因错在什么地方了,就知道怎么改了。将该句注释,就能得到输出参数的值了。
结果:
但网上很多SQLHelper很多都有把参数情况的,难道以后遇到这样的情况就要修改SQLHelper,肯定不行,遇到这种执行带输出参数的存储过程,还是用DataSet比较好,总之各有各的好处。
这个问题折磨了我一星期了,今天终于解决了,很开心。
突然想到一句话,分享一下:"学习不以分享为目的,就是耍流氓......";
遇到了很让人头疼的问题:SqlDataReader执行带输出参数的存储过程总是获取不到输出参数的正确值。这里将解决办法及分析过程列出,为遇到相同问题的小伙伴提供一种解决方案。
在SqlDataReader读取分页数据,pageCount你是肿么了?的评论中有博友提出将
param[2].Direction = ParameterDirection.Output;
该句代码放在执行查询前,确实有这一部分原因。按照该博友提供的方式我尝试了,但仍有问题:
param[2].Direction = ParameterDirection.Output; using (SqlDataReader reader = SQLHelper.ExecuteReader(sql, CommandType.StoredProcedure, param)) { while (reader.Read()) { list.Add(ConvertReaderToStudentModel(reader)); } } //为输出参数赋值 pageCount = (int)param[2].Value;
报错:
出现这种原因,首犯肯定是param为空了,是什么原因导致的呢?
经调试发现罪魁祸首原来在SQLHelper中
在执行前 cmd.Parameters.Clear();
执行后:
DbParameterCollention的Count为0,也就是集合中没有要加的参数了,所以出现“未将对象引用设置为对象的实例”的错误。
知道原因错在什么地方了,就知道怎么改了。将该句注释,就能得到输出参数的值了。
结果:
但网上很多SQLHelper很多都有把参数情况的,难道以后遇到这样的情况就要修改SQLHelper,肯定不行,遇到这种执行带输出参数的存储过程,还是用DataSet比较好,总之各有各的好处。
这个问题折磨了我一星期了,今天终于解决了,很开心。
突然想到一句话,分享一下:"学习不以分享为目的,就是耍流氓......";
相关文章推荐
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- SqlDataReader读取带有输出参数的存储过程
- 使用SqlDataReader获取输出参数
- ASP.Net执行存储过程,SqlDbType.Decimal作为输出参数,没有小数位值的解决办法
- SqlDataAdapter利用SqlCommand执行存储过程
- ADOQuery 执行存储过程并取的输出参数
- 动态SQL的执行,注:exec sp_executesql 其实可以实现参数查询和输出参数的
- SqlServer随笔——执行带输入输出参数的存储过程
- 存储过程中执行带输出参数的动态SQL
- 执行带out参数的存储过程sql
- Oracle带输入输出参数存储过程(包括sql分页功能)
- 动态SQL的执行,注:exec sp_executesql 其实可以实现参数查询和输出参数的
- 执行动态 sql 并为 输出参数赋值、sp_executesql 使用方法
- SqlDataAdapter使用存储过程不能使用参数?
- 数据库组件 Hxj.Data (十) (输出组件执行的sql)
- pl/sql sql 执行存储过程,带时间参数例子。
- asp.net 执行存储过程 无输出参数 有两个输入参数
- SqlDataReader 获取存储过程返回值
- 执行动态 sql 并为 输出参数赋值、sp_executesql 使用方法
- SqlCommand.ExecuteReader 无法获取 sqlserver 存储过程 OUTPUT 返回的参数值问题