Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ExecuteReader在执行有输出参数的存储过程时拿不到输出参数

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

作者头像
逸鹏
发布于 2018-04-10 03:28:39
发布于 2018-04-10 03:28:39
1.4K00
代码可运行
举报
文章被收录于专栏:逸鹏说道逸鹏说道
运行总次数:0
代码可运行

异常处理汇总-后端系列 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对象的,

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
        }
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我为Net狂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
T4模板生成代码。 数据实体层与数据仓储层。备注
文件下载连接 http://download.csdn.net/download/drawdream/9916255
蓝夏
2022/05/10
6460
mysql executereader_ExecuteReader()对象不能被转换
我已经在服务器上建立了一个mySql数据库,现在我想达到它,以便我做出一个web服务。首先,我只想测试我是否可以从我的方法(OneEntity)中的查询中获取实体,并将其放入我的列表中。ExecuteReader()对象不能被转换
全栈程序员站长
2022/08/28
4970
ado.net的简单数据库操作(三)——简单增删改查的实际应用
  上篇我记录了自己的SqlHelper的开发过程,今天记录一下如何使用这个sqlhelper书写一个具有简单增删改查的小实例啦。
CherishTheYouth
2019/09/11
1.4K0
ado.net的简单数据库操作(三)——简单增删改查的实际应用
ado.net的简单数据库操作(二)之封装SqlHelperl类
  从上篇文章给出的实例来看,你一定会发现,操作数据库其实还挺麻烦的,就连一个最简单的数据库操作语句都要包括 定义数据库连接字符串、创建数据库连接对象、打开数据库连接、定义sql语句、实例化操作数据库操作对象、操作数据库、关闭数据库等等步骤。但是,我们接触项目的时候会发现,数据库操作是项目中使用最频繁的功能了,那么有没有跟简单的方法去使用数据库的操作呢?有的,答案当然是,有的!怎么做?把数据库的操作封装成一个类呀,这就是我今天要记录的 封装SqlHelper类啦,哈哈!
CherishTheYouth
2019/09/11
8080
ado.net的简单数据库操作(二)之封装SqlHelperl类
ASP.NET部分代码示例
1 using System; 2 using System.Collections.Generic; 3 using Model; 4 using System.Data; 5 using System.Data.SqlClient; 6 7 8 namespace DAL 9 { 10 /// <summary> 11 /// 发布活动信息 12 /// </summary> 13 public class Activity
用户1112962
2018/07/03
11.2K0
CodeSmith 创建Ado.Net自定义模版(三)
CodeSmith 创建Ado.Net自定义模版(三) 接上一篇:   CodeSmith 创建Ado.Net自定义模版(二) 写数据访问层模版:Step3_DAL.cst (接口一这步在这套模版中省略,可以自行补充) 写几个通用方法,比如:得到全部实体集合、通过ID得实体、添加、删除、修改几个方法 我这里没有使用sqlhelper之类的帮助类 <%@ CodeTemplate Language="C#" TargetLanguage="C#" ResponseEncoding="UTF-8" Descri
Porschev
2018/01/16
9080
数据库之ADO.NET基础知识整理
       之前我们所学只能在查询分析器里查看数据,操作数据,我们不能让普通用户去学sql,所以我们搭建一个界面(Web Winform)让用户方便的操作数据库中的数据
洋仔聊编程
2019/01/15
2K0
两天完成一个小型工程报价系统(三层架构)
花了两天,整理了一下三层架构,顺便练了一个小型三层架构——工程报价系统。 功能很简单,完成基本的增删改查 搭建项目三层结构 界面的设计以及美化 分层代码的设计与实现 模型层:由于表
用户1161731
2018/01/11
1K0
两天完成一个小型工程报价系统(三层架构)
2014-10-27Android学习------SQLite数据库操作(三)-----数据库模块
以后需要数据库的时候把这两个类放到一个com.xx.xx.db包下,更改里面的数据库名称等,有效的管理自己的代码
wust小吴
2022/03/07
2490
java 版本SQLHelper
import java.sql.*; import java.util.logging.*; import javax.swing.table.*;
jack.yang
2025/04/05
440
温故而知新:设计模式之适配器模式(Adapter)
借用terrylee的原话: Adapter模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。 适配器模式再次体现了“面向接口编程,而非面向实现编程”这一精神。 场景: 有一个基于数据库的系统,里面的数据库操作就拿最常用的查询来说,主要是用SqlHelper类里的QueryData(string sql)这个方法来处理的,后来意外发现该方法实现上性能并不是最好(或者不能满足新的需要),而这时正好有一个第三方的DbHelper程序集,写得很成
菩提树下的杨过
2018/01/22
6480
温故而知新:设计模式之适配器模式(Adapter)
Python类中的修饰@classmethod 和@staticmethod【Flask】
在flask中,经常会为了代码美观将过程封装成类,去引用这个文件, 用例子来看区别(注意看fetch_one方法的调用)
来杯Sherry
2023/05/25
3480
一个自定义的C#数据库操作基础类 SqlHelper
SqlHelper其实是我们自己编写的一个类,使用这个类目的就是让使用者更方便、更安全的对数据库的操作,既 是除了在SqlHelper类以外的所有类将不用引用对数据库操作的任何类与语句,无须担心数据库的连接与关闭的问题。
用户7108768
2021/11/02
7960
ado.net的简单数据库操作(一)
摘要:接下来的几篇博客将要讲到如何使用ado.net实现简单的数据库操作,包括增删改等内容。首先会介绍基础的数据库操作,然后以一个实例来进行讲解,这个实例会把一个数据表读取到winform上,然后在winform上有一些按钮和文本框,通过这些实现对数据库里的内容的增删改的操作。我个人比较菜,因此记录计较详细,说话也啰嗦,因此可能会写几篇才能介绍完。
CherishTheYouth
2019/09/11
8180
ado.net的简单数据库操作(一)
asp.net 建多个项目实现三层的实例——读取一张表中的记录条数
  学习asp.net两周,通过学习发现,.net和php之间的区别还是蛮大的,比php要复杂一些,开始学习的有些吃力,后来跟着传智播客里的老师学习,渐渐的学到了一些东西。
CherishTheYouth
2019/09/12
1.3K0
asp.net 建多个项目实现三层的实例——读取一张表中的记录条数
Python面向对象1:基础介绍+封装特征
目前有三种编程方式: 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” java只支持面向对象编程;python支持函数式编程、面向对象编程 1、面向对象其实就是对类和对象的使用 案例1:函数式编程和面向对象编程初步比较 #函数式编程执行方法:【执行函数】 #面向对象编程:【创建对象】【通过对象执行方法】 创建对象及使用的步骤: a创建类 class类名():    def 方法名(se
企鹅号小编
2018/01/29
5090
mysql executereader_“c#”中“ExecuteReader”是什么意思?「建议收藏」
1、MSDN上说:Sends the CommandText to the Connection and builds a SqlDataReader.
全栈程序员站长
2022/08/28
1.5K0
.Net+SQL Server企业应用性能优化笔记1——调研
在进行了一段时间的调研后,本周开始着手进行性能优化工作。现在在优化工作工作之前,我总结一下调研了的一些信息。
深蓝studyzy
2022/06/16
3460
TkMybatis 是什么?
Tkmybatis 是基于 Mybatis 框架开发的一个工具,通过调用它提供的方法实现对单表的数据操作,不需要写任何 sql 语句,这极大地提高了项目开发效率。
JMCui
2020/12/03
5.3K0
Python-面向对像及其他
其他相关 1、isinstance(obj,cls)       检查是否obj是类cls的对象 # 针对变量 n = 123 s = "123" print isinstance(n,int) # True print isinstance(s,int) # False print isinstance(s,str) # False # 针对类 class Foo: pass obj = Foo() print isinstance(obj,Foo) # True 2、issubclass(sub,s
洗尽了浮华
2018/01/22
6680
推荐阅读
相关推荐
T4模板生成代码。 数据实体层与数据仓储层。备注
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验