ExecuteReader在执行有输出参数的存储过程时拿不到输出参数

简介:

异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html

后期会在博客首发更新:http://dnt.dkill.net/Article/Detail/312

今天一同志问我这个问题,这个是过程还原:

调用SQLHelper的时候发现输出参数没值了???

不用sqlhelper也是没有?神马情况?

用sqldataadapter却可以?

吓死宝宝了,赶紧看看啥情况。先换种方法看看

,,,我去,可以哇!那么是不是ExecuteReader容易有啥坑的问题呢?想了想,对头,是不是返回的reader有点问题?

先关了看看~我去,有值了!不会这么容易就搞定了吧?不行,得再试试

~~的确,reader没关闭,那输出参数就没值(其实也可以理解~reader说:本大王还没读取完呢,你丫急什么,给我等着)

不能就这样算了啊,我不能总自己写吧,sqlhelper的问题还是得解决

我去,还是没有。。。。。。。这可不行,看看sqlhelper的源码怎么搞的

万恶的清除啊!再试试

居然可以了,ok,收工了?来来来,我们继续看看

SQLHelper怎么写的?

额,经常听前辈说SqlDataAdapter是个神奇的东西,果然...

 

扩:一般很少直接返回SqlDataReader对象的,

贴一个比较弱的转换(有更好的可以贴评论中的,我就先抛个砖头)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public  static  IEnumerable<T> SqlDataReaderToList<T>(SqlDataReader reader)  where  T :  new ()
         {
             using  (reader)
             {
                 if  (reader.HasRows)
                 {
                     IList<T> list =  new  List<T>();
                     while  (reader.Read())
                     {
                         T t =  new  T();
                         PropertyInfo[] propertys = t.GetType().GetProperties();
                         foreach  (PropertyInfo pi  in  propertys)
                         {
                             string  tempName = pi.Name;
                             //设置 RowFilter
                             reader.GetSchemaTable().DefaultView.RowFilter =  string .Format( "ColumnName='{0}'" , tempName);
                             //判断SqlDataReader是否存在某列
                             if  (reader.GetSchemaTable().DefaultView.Count > 0)
                             {
                                 if  (!pi.CanWrite)
                                 {
                                     continue ;
                                 }
                                 var  value = reader[tempName];
                                 if  (value != DBNull.Value)
                                 {
                                     pi.SetValue(t, value,  null );
                                 }
                             }
                         }
                         list.Add(t);
                     }
                     return  list;
                 }
             }
             return  null ;
         }

 

 


本文转自毒逆天博客园博客,原文链接:http://www.cnblogs.com/dunitian/p/5362528.html,如需转载请自行联系原作者


相关文章
|
存储
SQLServer存储过程中的输出参数的使用
SQLServer存储过程中的输出参数的使用
61 0
|
6月前
|
存储 关系型数据库 MySQL
MySQL数据库——存储过程-if条件判断、参数、case(介绍、用法、案例)
MySQL数据库——存储过程-if条件判断、参数、case(介绍、用法、案例)
392 0
|
存储 SQL 关系型数据库
MySQL中不同类型参数存储过程示例
MySQL中不同类型参数存储过程示例
150 0
|
存储 SQL 关系型数据库
【MySQL速通篇003】MySQL视图,MySQL触发器,MySQL函数,MySQL存储过程(参数分类,存储过程的增删改查等),SQL的动态执行,支持事务的存储过程,pymysql 2
【MySQL速通篇003】MySQL视图,MySQL触发器,MySQL函数,MySQL存储过程(参数分类,存储过程的增删改查等),SQL的动态执行,支持事务的存储过程,pymysql 2
346 0
|
存储 SQL NoSQL
【MySQL速通篇003】MySQL视图,MySQL触发器,MySQL函数,MySQL存储过程(参数分类,存储过程的增删改查等),SQL的动态执行,支持事务的存储过程,pymysql 1
【MySQL速通篇003】MySQL视图,MySQL触发器,MySQL函数,MySQL存储过程(参数分类,存储过程的增删改查等),SQL的动态执行,支持事务的存储过程,pymysql 1
491 0
|
存储 SQL
sql server 存储过程传递表名参数及Dynamic SQL
sql server 存储过程传递表名参数及Dynamic SQL
sql server 存储过程传递表名参数及Dynamic SQL
|
存储 SQL 关系型数据库
MySQL的存储过程——输入参数(in)、输出参数(out)、输入输出参数(inout)
MySQL的存储过程——输入参数(in)、输出参数(out)、输入输出参数(inout)
2309 0
MySQL的存储过程——输入参数(in)、输出参数(out)、输入输出参数(inout)
|
1月前
|
存储 SQL NoSQL
|
2月前
|
存储 SQL 关系型数据库
MySql数据库---存储过程
MySql数据库---存储过程
41 5
|
2月前
|
存储 关系型数据库 MySQL
MySQL 存储过程返回更新前记录
MySQL 存储过程返回更新前记录
60 3