黑马程序员技术交流社区

标题: 封装过DataReader [打印本页]

作者: 贰的23次方    时间: 2014-3-15 20:18
标题: 封装过DataReader
本帖最后由 贰的23次方 于 2014-3-19 11:29 编辑

有没有人封装DataReader?
作者: 许庭洲    时间: 2014-3-16 07:16
封装一个SQLHelper类方便使用,提供ExecuteDataTable(string sql,params SqlParameter[] parameters), ExecuteNonQuery(string sql,params SqlParameter[] parameters)等方法。
作者: 张变    时间: 2014-3-16 07:55
SQlHelper.cs 下载 - 下载频道 - CSDN.NET
http://download.csdn.net/download/hexskyu/3102601
作者: shangxin    时间: 2014-3-16 10:33
你应该使用ExecuteReader的重载方法,ExecuteReader(CommandBehavior.CloseConnection),此方法会在reader关闭之后自动关闭数据库连接
作者: 贰的23次方    时间: 2014-3-16 14:09
许庭洲 发表于 2014-3-16 07:16
封装一个SQLHelper类方便使用,提供ExecuteDataTable(string sql,params SqlParameter[] parameters), Exec ...

我是想用ExecuteReader返回一个datareader类型
作者: 柳依风    时间: 2014-3-16 23:56
  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.         }
复制代码

作者: 贰的23次方    时间: 2014-3-18 10:18
柳依风 发表于 2014-3-16 23:56

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

请把问题设置为提问结束,这样可以给你加分。。
作者: threederek    时间: 2014-3-19 10:53
贰的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;
            }
        }
作者: 贰的23次方    时间: 2014-3-19 11:29
感谢细心回答




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2