• 一个封装好的SqlHelper类库,可以直接使用


    用习惯了Entity Framework有时会突然不会用ADO.NET直接访问数据了,今天总结了一个SqlHelper类库,以后不会了直接上来看就OK.

    代码很简单,一看就懂,没有使用DataSet,而使用了更轻便,简洁的DataTable.

    /*
     *作者:Frank Fan
     *创建时间:2011-5-23 16:52:18
     *再次编辑时间:2012-8-18 23:40:24
     *说明:数据库助手类
     *版权所有:fanyong.net@Gmail.com
     */
    
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Configuration;
    
    namespace DAL
    {
        public class SQLHelper
        {
            #region 变量
            private SqlConnection conn = null;
            private SqlCommand cmd = null;
            private SqlDataReader sdr = null; 
            #endregion
    
            public SQLHelper()
            {
                string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
                conn = new SqlConnection(connStr);
            }
    
            #region 获取数据库的连接
            /// <summary>
            /// 获取数据库的连接
            /// </summary>
            /// <returns>SqlConnection</returns>
            private SqlConnection GetConn()
            {
                //判断数据库状态
                if (conn.State == ConnectionState.Closed)
                {
                    conn.Open();
                }
                return conn;
            }
            #endregion
    
            #region 执行不带参数的增删改SQL语句或存储过程
            /// <summary>
            /// 执行不带参数的增删改SQL语句或存储过程
            /// </summary>
            /// <param name="cmdText">SQL语句或存储过程</param>
            /// <param name="ct">命令类型</param>
            /// <returns>受影响的行数</returns>
            public int ExecuteNonQuery(string cmdText, CommandType ct)
            {
                int res;
                try
                {
                    SqlCommand cmd = new SqlCommand(cmdText, GetConn());
                    cmd.CommandType = ct;
                    res = cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    if (conn.State == ConnectionState.Open)
                    {
                        conn.Close();
                    }
                }
    
                return res;
            }
            #endregion
    
            #region 执行带参数的增删改SQL语句或存储过程
            /// <summary>
            /// 执行带参数的增删改SQL语句或存储过程
            /// </summary>
            /// <param name="cmdText">SQL语句或存储过程</param>
            /// <param name="paras">参数</param>
            /// <param name="ct">命令类型</param>
            /// <returns>受影响的行数</returns>
            public int ExecuteNonQuery(string cmdText, SqlParameter[] paras, CommandType ct)
            {
                int res;
                using (cmd = new SqlCommand(cmdText, GetConn()))
                {
                    cmd.CommandType = ct;
                    //不用Add方法,用多个参数同时添加方法AddRange
                    //cmd.Parameters.Add(new SqlParameter("@catName","SQL注入')delete category where id=1--"));
                    cmd.Parameters.AddRange(paras);
                    res = cmd.ExecuteNonQuery();
                }
                return res;
            }
            #endregion
    
            #region 执行不带参数的SQL语句或存储过程
            /// <summary>
            /// 执行SQL语句或存储过程
            /// </summary>
            /// <param name="cmdText">SQL语句或存储过程</param>
            /// <param name="ct">命令类型</param>
            /// <returns>DataTable</returns>
            public DataTable ExecuteQuery(string cmdText, CommandType ct)
            {
                DataTable dt = new DataTable();
                cmd = new SqlCommand(cmdText, GetConn());
                cmd.CommandType = ct;
                using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                {
                    //把数据装入到DataTable中
                    dt.Load(sdr);
                }
                //记的关闭
                conn.Close();
                return dt;
            }
            #endregion
    
            #region 执行带参数的SQL语句或存储过程
            /// <summary>
            /// 执行带参数的SQL语句或存储过程
            /// </summary>
            /// <param name="cmdText">SQL语句或存储过程</param>
            /// <param name="paras">集合</param>
            /// <param name="ct">命令类型</param>
            /// <returns>DataTable</returns>
            public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct)
            {
                DataTable dt = new DataTable();
                cmd = new SqlCommand(cmdText, GetConn());
                cmd.CommandType = ct;
                cmd.Parameters.AddRange(paras);
                using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
                {
                    //把数据装入到DataTable中
                    dt.Load(sdr);
                }
                //记的关闭
                conn.Close();
                return dt;
            }
            #endregion
    
            #region 执行sql语句,返回第一行第一列的值
            /// <summary>
            /// 执行sql语句,返回第一行第一列的值
            /// </summary>
            /// <param name="sql">sql语句</param>
            /// <returns>返回第一行第一列</returns>
            public string ExecuteScalar(string sql)
            {
                try
                {
                    conn.Open();
                    cmd = new SqlCommand(sql, conn);
                    object obj = cmd.ExecuteScalar();
                    if (obj != null)
                    {
                        return obj.ToString();
                    }
                    return "";
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    if (conn.State == ConnectionState.Open)
                    {
                        conn.Close();
                    }
                }
            }
            #endregion
    
        }
    }
    

      

  • 相关阅读:
    如何简单实现一个react组件
    css实现弹框
    flex实现流式布局
    classnames的简单使用
    css处理内容溢出
    webpack学习
    github+hexo搭建,运行hexo g报错
    (附代码和截图)spring基于注解的java定时任务功能实现
    关于Cookie、session和localStorage、以及sessionStorage之间的区别和联系,超详细
    今天向大家推荐一个很强的编辑器——notepad++,没有插件plugin Manager的解决办法
  • 原文地址:https://www.cnblogs.com/fanyong/p/2646909.html
Copyright © 2020-2023  润新知