SqlHelper的封装

前言:

SqlHelper是一个基于.NETFrameWork的数据库操作组件,组件中包含操作数据库的各种方法,他封装的目的无疑是简化重复写的数据库连接,当SqlHelper封装以后,只需要给方法传入一些参数,就可以实现对数据库的访问。

SqlHelper类通过一组静态的方法来封装数据访问功能,不能被继承和实例化。SqlHelper 类中实现的每种方法的重载,每种方法的重载都支持不同的方法参数,开发人员可确定传递、连接、事物和参数,也使得选择访问数据的方式变得更加灵活。

 

例子

学习SqlHelper前,我们来学习一下操作数据库的类有哪些?

1.构造接收数据的结合  2.连接  3.命令  4.适配器  5.DataReader  6.DataSet.DataTable

  我们将一个某数据表中的数据显示到form窗体中的dataGridView控件中

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace userInfo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        { //操作数据库的类有哪些
          //  //0.构造接收数据的集合:
          //  //1.连接  Connection-- - SqliteConnection
          //  //2.命令 Command
          //  //3.适配器  DataAdapter
          //  //4.DataReader
          //  //5.DataSet.DateTable

            List<UserInfo> list = new List<UserInfo>(); //0构造接收数据的集合

            //1.将数据表ManagerInfo 中数据显示到DataGridview中
            string connStr = @"server=Jason\SQLEXPRESS;uid=sa;pwd=123456;database=charge_sys";
            //2.创建连接对象
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                //3.创建Command连接对象
                SqlCommand cmd = new SqlCommand("select * from User_Info", conn);
                //4.打开链接
                conn.Open();
                //5.执行命令
                SqlDataReader reader = cmd.ExecuteReader();
                //6.读取
                if (reader.HasRows)
                {
                    while (reader.Read())//判断是否存在数据
                    {
                        list.Add(new UserInfo()
                        {
                            userID = reader["UserId"].ToString(),
                            PWD = reader["Pwd"].ToString(),
                            Level = reader["Level"].ToString(),
                            UserName = reader["UserName"].ToString(),
                            Head = reader["Head"].ToString()
                        });
                    }
                }
                dataGridView1.DataSource = list; //7.数据显示到DataGridView上
                conn.Close();
            }           
        }
    }
}

SqlHelper的封装

如果存在多个界面对数据库进行操作,我们是不是一直重复写对数据操作的类,为了方便,我们对SqlHeIper进行封装。

1.添加一个配置文件(APPConfig):用于连接数据库,配置文件的存在无疑是我们可以随意更改自己连接的数据库,可见它不可进行封装。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
      <connectionStrings>
      <add name="ConStr" connectionString="server=Jason\SQLEXPRESS;uid=sa;pwd=123456;database=ChargingSystem"/>
      </connectionStrings>
</configuration>

2.实现SqlHelper 的封装

步骤:

1.定义一个静态的连接字符串,并且读取字符串

2. ExecuteNonQuery(); : 执行命令的方法:insert update delete,返回值类型为int型。多用于执行增加,删除,修改数据,返回受影响的行数。当select操作时,返回-1。
  方法返回值意义:对于执行命令的成功的返回值为该命令所影响的行数,如果影响的行数为0时返回的值为0,

3.ExecuteScaler(); 获取首行首列的方法:执行select查询,返回值类型多位int类型。得到的返回结果为一个值的情况,比如使用count函数求表中记录个数或者使用sum函数求和等。
ExecuteScalar()方法也用来执行SQL语句,但是ExecuteScalar()执行SQL语句后的返回值与ExecuteNonQuery()并不相同,
ExecuteScalar()方法的返回值的数据类型是Object类型。
如果执行的SQL语句是一个查询语句(SELECT),则返回结果是查询后的第一行的第一列,
如果执行的SQL语句不是一个查询语句,则会返回一个未实例化的对象,必须通过类型转换来显示,

4. DataTable ();获取结果结果集

5.ExecuteReader(); :用于查询操作。返回类型为SqlDataReader。SqlDataReader对象的Read();方法进行逐行读取。
其中的读取数据列的时候。除了使用reder["列名"].ToString();还可以使用reder[索引].ToSting();<注意:这里的索引指的是数据库中列的索引。从0开始。

using System;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;

namespace DAL
{
    public static class sqlHelper
    {

        //从配置文件中读取连接字符串
        private static string connStr = ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString;

        //1.ExecuteNonQuery(); : //执行命令的方法:insert update delete
        //它的返回值类型为int型。多用于执行增加,删除,修改数据,返回受影响的行数。当select操作时,返回-1。
        //ExecuteNonQuery()方法主要用户更新数据,通常它使用Update,Insert,Delete语句来操作数据库,
        //其方法返回值意义:对于 Update, Insert, Delete 语句 执行成功是返回值为该命令所影响的行数,如果影响的行数为0时返回的值为0,
        //params是关键字:是可变参数的意思,目的是省略手动构造数组的过程,直接指定对象编译器会帮助我们构造数组,并将对象加入数组中传递过来
        public static int ExcuteNonQuery(string sql, params SqlParameter[] paras)
        {
            using (SqlConnection conn = new SqlConnection(connStr))//创建连接对象
            {
                SqlCommand cmd = new SqlCommand(sql, conn);  //创建Command连接对象
                cmd.Parameters.AddRange(paras);//添加参数
                conn.Open();//打开链接
                return cmd.ExecuteNonQuery(); //执行命令并返回受影响的行数            
            }
        }



        //ExecuteScaler(); 获取首行首列的方法
        //它的返回值类型多位int类型。它返回的多为执行select查询。得到的返回结果为一个值的情况,比如使用count函数求表中记录个数或者使用sum函数求和等。
        //ExecuteScalar()方法也用来执行SQL语句,但是ExecuteScalar()执行SQL语句后的返回值与ExecuteNonQuery()并不相同,
        //ExecuteScalar()方法的返回值的数据类型是Object类型。
        //如果执行的SQL语句是一个查询语句(SELECT),则返回结果是查询后的第一行的第一列,
        //如果执行的SQL语句不是一个查询语句,则会返回一个未实例化的对象,必须通过类型转换来显示,
        public static Object ExecuteScalar(string sql, params SqlParameter[] paras)
        {
            using (SqlConnection conn = new SqlConnection(connStr))//创建连接对象
            {
                SqlCommand cmd = new SqlCommand(sql, conn);  //创建Command连接对象
                cmd.Parameters.AddRange(paras);//添加参数
                conn.Open();//打开链接
                return cmd.ExecuteScalar(); //执行命令,获取查询结构中的首行首列的值         
            }
        }


        //获取结果结果集
        public static DataTable GetDataTable(string sql, params SqlParameter[] paras)
        {
            using (SqlConnection conn = new SqlConnection(connStr))//创建连接对象
            {
                SqlDataAdapter adapter = new SqlDataAdapter(sql, conn); //创建适配器对象
                DataTable dt = new DataTable();//构造数据表用于接收查询结果
                adapter.SelectCommand.Parameters.AddRange(paras);//添加参数
                adapter.Fill(dt);//执行结果,fill方法内部自动打开链接,不需要conn.open();               
                return dt; //返回结果集         
            }
        }
    }
}

关于SqlHelper的封装我就先介绍到这里,希望自己的总结对大家能有所帮助,大家一定要记得点赞哦。

猜你喜欢

转载自blog.csdn.net/fjxcsdn/article/details/81204850
今日推荐