简单的SqlHelper

现在网上还有教科书上面的SQlHelper很多都没有关闭连接和释放资源,使得在开发项目的时候,网站的反应越来越慢,最终导致崩溃。

现在我推出的这个SQlHelper使用了Using来自动释放资源,无需我们手动释放。

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Configuration;
  4 using System.Data;
  5 using System.Data.SqlClient;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Threading.Tasks;
  9
 10 namespace DAL
 11 {
 12     public static  class SqlHelper
 13     {
 14         //定义一个连接字符串
 15         //readonly修饰的变量,只能在初始化的时候复制,以及在构造函数中赋值,其他地方只能读取不能设置值
 16         private static readonly string conStr = ConfigurationManager.ConnectionStrings[""].ConnectionString;
 17         /// <summary>
 18         ///  ExecuteNonQuery
 19         /// </summary>
 20         /// <param name="sql">要执行的语句/param>
 21         /// <param name="type">指定类型(存储过程还是语句)</param>
 22         /// <param name="pms">参数</param>
 23         /// <returns></returns>
 24         public static int ExecuteNonQuery(string sql, CommandType type, params SqlParameter[] pms)
 25         {
 26             using (SqlConnection con = new SqlConnection(conStr))
 27             {
 28                 using (SqlCommand cmd = new SqlCommand(sql, con))
 29                 {
 30                     //判断传入的是sql语句还是存储过程
 31                     cmd.CommandType = type;
 32                     if (pms != null)
 33                     {
 34                         cmd.Parameters.AddRange(pms);
 35                     }
 36                     con.Open();
 37                     return cmd.ExecuteNonQuery();
 38                 }
 39             }
 40         }
 41         /// <summary>
 42         /// 返回单个值
 43         /// </summary>
 44         /// <param name="sql"></param>
 45         /// <param name="type"></param>
 46         /// <param name="pms"></param>
 47         /// <returns></returns>
 48         public static object ExecuteScalar(string sql, CommandType type, params SqlParameter[] pms)
 49         {
 50             using (SqlConnection con = new SqlConnection(conStr))
 51             {
 52                 using (SqlCommand cmd = new SqlCommand(sql, con))
 53                 {
 54                     cmd.CommandType = type;
 55                     if (pms != null)
 56                     {
 57                         cmd.Parameters.AddRange(pms);
 58                     }
 59                     con.Open();
 60                     return cmd.ExecuteScalar();
 61                 }
 62             }
 63         }
 64         public static SqlDataReader ExecuteReader(string sql, CommandType type, params SqlParameter[] pms)
 65         {
 66             //这里不使用using是因为reader对象不能关闭连接。reader对象在使用时,必须保证连接是打开的。
 67             SqlConnection con = new SqlConnection(conStr);
 68             using (SqlCommand cmd = new SqlCommand(sql, con))
 69             {
 70                 cmd.CommandType = type;
 71                 if (pms !=null)
 72                 {
 73                     cmd.Parameters.AddRange(pms);
 74                 }
 75                 try
 76                 {
 77                     con.Open();
 78                     //使用CommandBehavior.CloseConnection,表示将来使用完毕sqlDatareader后,在关闭reader的同时,关闭关联的Connection对象。
 79                     return cmd.ExecuteReader(CommandBehavior.CloseConnection);
 80                 }
 81                     //异常执行
 82                 catch (Exception)
 83                 {
 84                     con.Close();
 85                     con.Dispose();
 86                     throw;
 87                 }
 88             }
 89         }
 90         public static DataTable ExcuteDataTable(string sql, CommandType type, params SqlParameter[] pms)
 91         {
 92             DataTable dt = new DataTable();
 93             using (SqlDataAdapter adapter = new SqlDataAdapter(sql, conStr))
 94             {
 95                 adapter.SelectCommand.CommandType = type;
 96                 if (pms!=null)
 97                 {
 98                     adapter.SelectCommand.Parameters.AddRange(pms);
 99                 }
100                 adapter.Fill(dt);
101             }
102             return dt;
103         }
104     }
105 }
时间: 2024-10-07 05:20:22

简单的SqlHelper的相关文章

分享一个简单的简单的SQLHelper类

分享一个简单的简单的SQLHelper类,代码如下: 1 class SqlHelper 2 { 3 public static readonly string connstr = 4 ConfigurationManager.ConnectionStrings["dbConnStr"].ConnectionString; 5 6 public static int ExecuteNonQuery(string cmdText, 7 params SqlParameter[] para

C#简单的Sqlhelper

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Configuration;using System.Data;using System.Data.SqlClient;namespace DAL{ public class SqlHelper { //定义连接字符串 public static readonly string connSr = Config

&quot;类工厂模式&quot;改写SqlHelper

看到标题您一定很疑惑,23种经典设计模式什么时候多了一个"类工厂模式",稍等,请听我慢慢道来. 实践是检验真理的唯一途径.最近用了"类工厂模式"改写了我公司的SqlHelper类,改写了一大半了,拿出半成品和大家一起讨论. 首先说下我们公司环境:我公司在ABC三地都有工厂,同时都有各自的DB.经过调研,ABC三地的很多网页都有可有整合在一起的地方,我负责整合三地网页. 一开始,没接触设计模式的时候.我的Sql是这样写的:"select * from &qu

【转】mvc

又看到有人在问三层架构和MVC的关系,感觉这种问题有点教条化了.因为它们都在逻辑上将应用程序划为三块,凑了一个数字3,就有人非要把它们联系到一起了. 这两个东西我接触有几年了,有一点体会,表达一下: 三层是三层,MVC是MVC,它们毫无关系的. 三层是从整个应用程序架构的角度来分的三层(如果程序需要,还可以分多层). 三层是为了解决整个应用程序中各个业务操作过程中不同阶段的代码封装的问题,为了使程序员更加专注的处理某阶段的业务逻辑. 比如将数据库操作代码封装到一层中,提供一些方法根据参数直接返回

如何在ASP.NET 5中使用ADO.NET

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:ASP.NET 5是一个全新的平台,在这个平台上也带来一些全新的函数库.不过这并非意味着老的函数库(比如ADO.NET)就不能运行在ASP.NET 5之下. 如果想在ASP.NET 5之下使用经典的ADO.NET函数库,要怎么做呢.今天推荐的文章就进行了简单介绍.其实很简单,不能如之前那边直接引用System.Data 和System.Data.SqlClient的程序集,而是需要引用Syst

新闻发布系统后台

作为第一个进行的Web系统,新闻发布系统的后台代码和之前编写的机房没有太大的区别,下面主要通过SQLHelper()方法的创建和重构总结下新闻系统的后台. 首先是画用例图.类图.进行数据库的设计!这里不做详细说明每个系统开始的工作.然后编写D层代码SQLHelper(),以ExecuteNonQuery()方法来简单描述SQLHelper()的几次重构 1.主要结构 原来是针对单个的一个功能写一个方法,这里将方法的主要结构拿出,通过传入sql语句来执行类似的操作. public int Exec

图解“管道过滤器模式”应用实例:SOD框架的命令执行管道

管道和过滤器 管道和过滤器是八种体系结构模式之一,这八种体系结构模式是:层.管道和过滤器.黑板.代理者.模型-视图-控制器(MVC) 表示-抽象-控制(PAC).微核.映像. 管道和过滤器适用于需要渐增式处理数据流的领域,而常见的“层”模式它 能够被分解成子任务组,其中每个子任务组处于一个特定的抽象层次上. 按照<POSA(面向模式的软件架构)>里的说法,管道过滤器(Pipe-And-Filter)应该属于架构模式,因为它通常决定了一个系统的基本架构.管道过滤器和生产流水线类似,在生产流水线上

C#三层构架

三层构架:表示层(即界面层UI)->业务逻辑层(Business logic level)->数据访问层(Database access level) 由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是“无知”的,改变上层的设计对于其调用的底层而言没有任何影响.如果在分层设计时,遵循了面向接口设计的思想,那么这种向下的依赖也应该是一种弱依赖关系.因而在不改变接口定义的前提下,理想的分层式架构,应该是一个支持可抽取.可替换的“抽屉”式架构.正因为如此,业务逻辑层的设计对于一个支

三层架构、MVC

三层架构 将整个业务应用划分为:界面层(User Interface layer, UIL).业务逻辑层(Business Logic Layer, BLL).数据访问层(Data access layer, DAL). 1:界面层:主要是指与用户交互的界面.用于接收用户输入的数据和显示处理后用户需要的数据.如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务. 2:业务逻辑层:UI层和DAL层之间的桥梁.实现业务逻辑.业务逻辑具体包含:验证.计算.业务规则等等. 3:数