简单的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 }
原文地址:https://www.cnblogs.com/liuzhidao/p/7117331.html