• 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);
            }
        }

    }

  • 相关阅读:
    转:[windows]DOS批处理添加任务计划
    转:winform_webApiSelfHost及 OWIN WebAPI Service
    Ubuntu上将终端安装到右键上
    Ubuntu上安装VMware tools
    OpenStack中的rabbitmq的配置方法
    centos上的grub文件修改
    centos7上安装0penStack
    怎样使用yum安装OpenStack
    epel扩展库的安装
    centos7上修改主机名
  • 原文地址:https://www.cnblogs.com/bedfly/p/12389206.html
Copyright © 2020-2023  润新知