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=JasonSQLEXPRESS;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):用于连接数据库,配置文件的存在无疑是我们可以随意更改自己连接的数据库,可见它不可进行封装,也就无法封装在SQLHelper里面。

    <?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=JasonSQLEXPRESS;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.Data;
    using System.Data.SqlClient;
    using System.Configuration;
     
     
    namespace DAL
    {
        public class SqlHelper
        {
            //从配置文件中读取连接字符串
            private static string connStr = ConfigurationManager.ConnectionStrings["sql"].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();//打开链接
                    int n = cmd.ExecuteNonQuery(); //执行命令并返回受影响的行数  
                    cmd.Parameters.Clear();
                    return n;
                }
            }
     
     
     
            //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();//打开链接
                    object o = cmd.ExecuteScalar(); //执行命令,获取查询结构中的首行首列的值  
                    cmd.Parameters.Clear();
                    return o;
                }
            }
     
     
            //获取结果结果集
            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();   
                    adapter.SelectCommand.Parameters.Clear();//清空集合
                    return dt; //返回结果集        
                }
            }
        }
    }
     

上面的SqlHelper无法调用存储过程,此时我们需要在每一方法中加入参数CommandType type

参数CommandType type放在可变参数paras之前

 cmd.CommandType = type;

     
    using System.Configuration;
    using System.Data;
    using System.Data.SqlClient;
     
    namespace winFormUI
    {
        public  class SqlHelper
        {
            private static readonly string connStr = ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString;
            public static DataTable GetDataTable(string sql, CommandType type, params SqlParameter[] paras)
            {
                using (SqlConnection conn = new SqlConnection(connStr))//创建连接对象
                {
                    //创建适配器对象
                    using (SqlDataAdapter adapter = new SqlDataAdapter(sql, conn))
                    {
                        if (paras != null)
                        {
                            adapter.SelectCommand.Parameters.AddRange(paras);//添加参数
                        }
                        adapter.SelectCommand.CommandType = type;
                        DataTable dt = new DataTable();//构造数据表用于接收查询结果                   
                        adapter.Fill(dt);//执行结果,fill方法内部自动打开链接,不需要conn.open();   
                        adapter.SelectCommand.Parameters.Clear();//清空集合
                        return dt; //返回结果集       
                    }
                }
            }
     
            public static int ExcuteNonQuery(string sql, CommandType type, params SqlParameter[] paras)
            {
                using (SqlConnection conn = new SqlConnection(connStr))//创建连接对象
                {
                    using (SqlCommand cmd = new SqlCommand(sql, conn)) //创建Command连接对象
                    {
                        if (paras != null)
                        {
                            cmd.Parameters.AddRange(paras);//添加参数
                        }
                        cmd.CommandType = type;
                        conn.Open();//打开链接
                        int n = cmd.ExecuteNonQuery(); //执行命令并返回受影响的行数  
                        cmd.Parameters.Clear();
                        return n;
                    }
     
                }
            }
     
     
     
            public static object ExecuteScalar(string sql, CommandType type, params SqlParameter[] paras)
            {
                using (SqlConnection conn = new SqlConnection(connStr))//创建连接对象
                {
                    using (SqlCommand cmd = new SqlCommand(sql, conn)) //创建Command连接对象
                    {
                        if (paras != null)
                        {
                            cmd.Parameters.AddRange(paras);//添加参数
                        }
                        cmd.CommandType = type;
                        conn.Open();//打开链接                    
                        return cmd.ExecuteScalar(); ;
                    }
     
                }
            }
        }
    }
————————————————
版权声明:本文为CSDN博主「冯佳兴」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fjxcsdn/article/details/81204850

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

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

namespace UpdateUserId_ConsoleApp
{
    class sqlHelper
    {
        public static string GetSqlConnectionString()
        {
            return ConfigurationManager.ConnectionStrings["sqlConnection"].ToString();
        }
        //适合增删改操作,返回影响条数
        public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(GetSqlConnectionString()))
            {
                using (SqlCommand comm = conn.CreateCommand())
                {
                    try
                    {
                        conn.Open();
                        comm.CommandText = sql;
                        comm.Parameters.AddRange(parameters);
                        return comm.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        throw new Exception(ex.Message);
                    }
                    finally
                    {
                        if (conn != null && conn.State != ConnectionState.Closed)
                            conn.Close();
                    }
                    
                }
            }
        }
        //查询操作,返回查询结果中的第一行第一列的值
        public static object ExecuteScalar(string sql, params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(GetSqlConnectionString()))
            {
                using (SqlCommand comm = conn.CreateCommand())
                {
                    try
                    {
                        conn.Open();
                        comm.CommandText = sql;
                        comm.Parameters.AddRange(parameters);
                        return comm.ExecuteScalar();
                    }
                    catch (Exception ex)
                    {
                        throw new Exception(ex.Message);
                    }
                    finally
                    {
                        if (conn != null && conn.State != ConnectionState.Closed)
                            conn.Close();
                    }
                }
            }
        }
        //Adapter调整,查询操作,返回DataTable
        public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
        {
            using (SqlDataAdapter adapter = new SqlDataAdapter(sql, GetSqlConnectionString()))
            {
                DataTable dt = new DataTable();
                adapter.SelectCommand.Parameters.AddRange(parameters);
                adapter.Fill(dt);
                return dt;
            }
        }

        public static SqlDataReader ExecuteReader(string sqlText, params SqlParameter[] parameters)
        {
            //SqlDataReader要求,它读取数据的时候有,它独占它的SqlConnection对象,而且SqlConnection必须是Open状态
            SqlConnection conn = new SqlConnection(GetSqlConnectionString());//不要释放连接,因为后面还需要连接打开状态
            SqlCommand cmd = conn.CreateCommand();
            conn.Open();
            cmd.CommandText = sqlText;
            cmd.Parameters.AddRange(parameters);
            //CommandBehavior.CloseConnection当SqlDataReader释放的时候,顺便把SqlConnection对象也释放掉
            return cmd.ExecuteReader(CommandBehavior.CloseConnection);
        }
    }

}

原文地址:https://www.cnblogs.com/bedfly/p/12389206.html