ADO.net封装SQL Helper

//1.设置sqlHelper为静态类

  public static class SqlHelper

//2.设置连接字符串的app.config配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name ="mssqlserver" connectionString="Data source=.;initial catalog=sqldemos;user id=sa;password=123456;"/>
  </connectionStrings>
</configuration>

//3.添加引用 System.Configuration
ADO.net封装SQL Helper_第1张图片

//sqlHelper.cs

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace _07城市列表和递归Treeview
{
    public static class SqlHelper
    {

        //1.设置sqlHelper为静态类
        //2.设置连接字符串的app.config配置文件
        //3.添加引用 System.Configuration 
        //3.5using System.Configuration;
        //4.配置constr语句(private static readonly 私有字段静态只读类型)
        private static readonly string conStr = ConfigurationManager.ConnectionStrings["mssqlserver"].ConnectionString;

        //5.封装 ExecuteNonQuery 用于增insert删delete改update
        public static int ExecuteNonQuery(string sql, params SqlParameter[] pms)
        {
            using (SqlConnection conn = new SqlConnection(conStr))
            {
                using (SqlCommand cmd = new SqlCommand(sql,conn))
                {
                    if (pms != null)//如果有参数,加载参数
                    {
                        cmd.Parameters.AddRange(pms);
                    }
                    conn.Open();
                    return cmd.ExecuteNonQuery();
                }
            }          
        }
        //6.封装ExecuteScalar方法用于返回单个值
        public static object ExecuteScalar(string sql, params SqlParameter[] pms)
        {
            using (SqlConnection conn= new SqlConnection(conStr))
            {
                using (SqlCommand cmd = new SqlCommand(sql,conn))
                {
                    if (pms != null)//如果有参数,加载参数
                    {
                        cmd.Parameters.AddRange(pms);
                    }
                    conn.Open();
                    return cmd.ExecuteScalar();
                }
            }           
        }
        //7.封装ExecuteReader 方法用于返回多个值
        public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] pms)
        {
        //reader方法不要将connect-using 否则在跳出静态类时,会close和dispose conn对象,造成外界无法调用reader对象
            SqlConnection conn = new SqlConnection(conStr);
            
                using (SqlCommand cmd = new SqlCommand(sql,conn))
                {
                    if (pms != null)
                    {
                        cmd.Parameters.AddRange(pms);
                    }
                    try//捕获sql发生错误,防止链接无法正常关闭
                    {
                        conn.Open();
                        //System.Data.CommandBehavior.CloseConnection这个枚举参数,表示将来使用完毕SqlDataReader之后,关闭Reader的同时,将Reader关联的Connection链接,也同时关闭,释放资源。
                        return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
                    }
                    catch
                    {
                        conn.Close();
                        conn.Dispose();
                        throw;//将异常传递出try-catch
                    }
                }
           
        }
 public static DataTable SqlDataAdapter(string sql, params SqlParameter[] pms)
        {
            DataTable dt = new DataTable();
            
            using (SqlDataAdapter da= new SqlDataAdapter(sql,conStr))
            {
                if (pms != null)
                {
                    da.SelectCommand.Parameters.AddRange(pms);//SqlDataAdapter里面只有一个SelectCommand可以直接用
                }
                da.Fill(dt);
            }
            return dt;
        }
    }//sqlhelper
}

你可能感兴趣的:(C#,ADO.net)