A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贰的23次方 中级黑马   /  2014-3-15 20:18  /  1741 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 贰的23次方 于 2014-3-19 11:29 编辑

有没有人封装DataReader?

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

9 个回复

倒序浏览
封装一个SQLHelper类方便使用,提供ExecuteDataTable(string sql,params SqlParameter[] parameters), ExecuteNonQuery(string sql,params SqlParameter[] parameters)等方法。
回复 使用道具 举报
SQlHelper.cs 下载 - 下载频道 - CSDN.NET
http://download.csdn.net/download/hexskyu/3102601
回复 使用道具 举报 1 0
你应该使用ExecuteReader的重载方法,ExecuteReader(CommandBehavior.CloseConnection),此方法会在reader关闭之后自动关闭数据库连接

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
许庭洲 发表于 2014-3-16 07:16
封装一个SQLHelper类方便使用,提供ExecuteDataTable(string sql,params SqlParameter[] parameters), Exec ...

我是想用ExecuteReader返回一个datareader类型
回复 使用道具 举报
  1. public static SqlDataReader ExecuteReader(string sql,CommandType cType, params SqlParameter[] spms)
  2.         {
  3.             SqlConnection conn = new SqlConnection(constr);
  4.             using (SqlCommand cmd = conn.CreateCommand())
  5.             {
  6.                 cmd.CommandText = sql;
  7.                 cmd.CommandType = cType;
  8.                 if (spms != null)
  9.                     cmd.Parameters.AddRange(spms);
  10.                 try
  11.                 {
  12.                     conn.Open();
  13.                     return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
  14.                 }
  15.                 catch
  16.                 {
  17.                     conn.Close();
  18.                     conn.Dispose();
  19.                     throw;
  20.                 }
  21.             }
  22.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报 1 0

非常感谢柳依风的回答,还有俩个地方不是很明白。
1.CommandType cType传值的时候,对于查询语句和非查询语句有什么不一样么,我试了一下采用默认值,程序运行ok,能不能举几个用CommandType 不使用默认值的例子
2.传过去的SqlDataReader对象是不是必须手动关闭和释放?
回复 使用道具 举报

请把问题设置为提问结束,这样可以给你加分。。
回复 使用道具 举报
贰的23次方 发表于 2014-3-18 10:18
非常感谢柳依风的回答,还有俩个地方不是很明白。
1.CommandType cType传值的时候,对于查询语句和非查询 ...

CommandType的设置是为了区别传入普通SQL语句还是存储过程的,普通SQL语句使用CommandType,Text,存储过程使用CommandType.StoredProcedure

传过去的SqlDataReader在外部调用时释放,在写SqlHelper时返回ExecuteReader时加入参数CommandBehavior.CloseConnection, 如下:

public static SqlDataReader ExecuteDataReader(string sql, CommandType cmdType, params SqlParameter[] pms)
        {
            SqlConnection conn = new SqlConnection(constr);
            try
            {
                using (SqlCommand cmd = new SqlCommand(sql, conn))
                {
                    cmd.CommandType = cmdType;
                    if (pms != null)
                    {
                        cmd.Parameters.AddRange(pms);
                    }
                    conn.Open();
                    return cmd.ExecuteReader(CommandBehavior.CloseConnection);
                }
            }
            catch
            {
                conn.Dispose();
                throw;
            }
        }
回复 使用道具 举报 1 0
感谢细心回答
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马