• SqlDataReader执行带输出参数存储过程 错误分析


    在上一篇随笔: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比较好,总之各有各的好处。

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

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

  • 相关阅读:
    UPC12617 卡片
    mcmf的dijkstra板子(来自PHY学长)
    UPC9630 Mad Veterinarian
    UPC8173【 哈希和哈希表】Three Friends
    UPC9655 Plug It In!
    UPC8428 网格VI
    UPC4248【数论】数字迷阵
    UPC4247【数论】普通递归关系
    SPOJ
    hdu 5992 Finding Hotels (kdTree)
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/3306113.html
Copyright © 2020-2023  润新知