一个数据访问公共类

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


namespace DBUtility
{
    /// <summary>
    /// SqlHelper 的摘要说明
    /// 数据访问公共类
    /// 1.使用静态方法,便于调用
    /// 2.每个方法都新建一个连接对象、命令对象以支持多线程操作
    /// </summary>
    public class SqlHelper
    {
        //数据库连接串
        private static readonly string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ToString();

        #region 数据库连接对象操作
        /// <summary>
        /// 打开数据库连接
        /// </summary>
        private static SqlConnection OpenConnection()
        {
            try
            {
                SqlConnection conn = new SqlConnection(connectionString);
                conn.Open();
                return conn;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        /// <summary>
        /// 关闭数据库连接释放资源
        /// </summary>
        /// <param name="Conn">数据库连接对象</param>
        public static void DisposeConnection(SqlConnection Conn)
        {
            if (Conn != null)
            {
                Conn.Close();
                Conn.Dispose();
            }
        }

        #endregion

        #region SQL操作语句

        /// <summary>
        /// 执行Sql查询语句
        /// </summary>
        /// <param name="strSQL">传入的Sql语句</param>
        /// <returns>返回受影响的行数</returns>
        public static int ExecuteSql(string strSQL)
        {
            try
            {
                SqlConnection conn = OpenConnection();
                SqlCommand comm = new SqlCommand(strSQL, conn);
                int val = comm.ExecuteNonQuery();

                DisposeConnection(conn);
                return val;

            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }

        /// <summary>
        /// 执行Sql查询语句,同时进行事务处理
        /// </summary>
        /// <param name="strSQL">传入的Sql语句</param>
        /// <returns>返回受影响的行数</returns>
        public static int ExecuteSqlWithTransaction(string strSQL)
        {
            SqlTransaction trans;
            SqlConnection conn = OpenConnection();
            SqlCommand comm = new SqlCommand(strSQL, conn);

            trans = conn.BeginTransaction();
            comm.Transaction = trans;

            try
            {
                int val = comm.ExecuteNonQuery();
                trans.Commit();

                DisposeConnection(conn);
                trans.Dispose();
                return val;
            }
            catch (Exception ex)
            {
                trans.Rollback();
                throw new Exception(ex.Message);
            }
        }


        /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="procName">存储过程名</param>
        /// <param name="coll">参数集合</param>
        /// <returns>返回受影响的行数</returns>
        public static int ExecutePorcedure(string procName, SqlParameter[] parameters)
        {
            try
            {
                SqlConnection conn = OpenConnection();
                SqlCommand comm = new SqlCommand();
                comm.Connection = conn;

                for (int i = 0; i < parameters.Length; i++)
                {
                    comm.Parameters.Add(parameters[i]);
                }
                comm.CommandType = CommandType.StoredProcedure;
                comm.CommandText = procName;
                int val = comm.ExecuteNonQuery();

                DisposeConnection(conn);
                return val;

            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }

        #endregion

        #region 数据查询

        /// <summary>
        /// 执行Sql查询语句并返回第一行的第一条记录,返回值为object 使用时需要拆箱操作 -> Unbox
        /// 例如string userName = (string)ExecuteScalar("select userName from users");
        /// </summary>
        /// <param name="strSQL">传入的Sql语句</param>
        /// <returns>object 返回值</returns>
        public static object ExecuteScalar(string strSQL)
        {
            object obj = new object();
            try
            {
                SqlConnection conn = OpenConnection();
                SqlCommand comm = new SqlCommand(strSQL, conn);
                obj = comm.ExecuteScalar();

                DisposeConnection(conn);
                return obj;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

        }

        /// <summary>
        /// 执行SQL语句返回第一行第一列的值
        /// </summary>
        /// <param name="strSQL">传入的SQL语句</param>
        /// <returns></returns>
        public static string getValue(string strSQL)
        {
            string strReturn = "";
            SqlDataReader dr = null;
            SqlConnection conn = OpenConnection();
            SqlCommand comm = new SqlCommand(strSQL, conn);
            try
            {
                dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
                while (dr.Read())
                {
                    if (dr[0].ToString().Length > 0)
                        strReturn = dr[0].ToString();
                }
                return strReturn;

            }
            catch (Exception ex)
            {
                if (dr != null && !dr.IsClosed)
                    dr.Close();
                DisposeConnection(conn);
                throw new Exception(ex.Message);
            }

        }

        /// <summary>
        /// 返回指定Sql语句的SqlDataReader,请注意,在使用后请关闭本对象,同时将自动调用closeConnection()来关闭数据库连接
        /// </summary>
        /// <param name="strSQL">传入的Sql语句</param>
        /// <returns>SqlDataReader对象</returns>
        public static SqlDataReader getDataReader(string strSQL)
        {
            SqlDataReader dr = null;
            SqlConnection conn = OpenConnection();
            try
            {

                SqlCommand comm = new SqlCommand(strSQL, conn);
                dr = comm.ExecuteReader(CommandBehavior.CloseConnection);

                return dr;
            }
            catch (Exception ex)
            {
                if (dr != null && !dr.IsClosed)
                    dr.Close();
                DisposeConnection(conn);
                throw new Exception(ex.Message);
            }

        }

        /// <summary>
        /// 返回指定Sql语句的DataTable
        /// </summary>
        /// <param name="strSQL">传入的Sql语句</param>
        /// <returns>DataTable</returns>
        public static DataTable getDataTable(string strSQL)
        {
            try
            {
                SqlConnection conn = OpenConnection();
                SqlCommand comm = new SqlCommand(strSQL, conn);
                SqlDataAdapter da = new SqlDataAdapter(comm);
                DataTable table = new DataTable();
                da.Fill(table);

                DisposeConnection(conn);
                return table;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        /// <summary>
        /// 执行带参数存储过程并返回数据表
        /// </summary>
        /// <param name="procName">存储过程名称</param>
        /// <param name="parameters">SqlParameterCollection 输入参数</param>
        /// <returns>dataTable</returns>
        public static DataTable getDataTable(string procName, SqlParameter[] parameters)
        {
            SqlDataAdapter da = new SqlDataAdapter();
            DataTable datatable = new DataTable();
            try
            {
                SqlConnection conn = OpenConnection();
                SqlCommand comm = new SqlCommand();
                comm.Connection = conn;
                comm.Parameters.Clear();
                comm.CommandType = CommandType.StoredProcedure;
                comm.CommandText = procName;

                for (int i = 0; i < parameters.Length; i++)
                {
                    comm.Parameters.Add(parameters[i]);
                }

                da.SelectCommand = comm;
                da.Fill(datatable);

                DisposeConnection(conn);
                return datatable;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }

        /// <summary>
        /// 根据DataReader生成DataTable
        /// </summary>
        /// <param name="strSQL">传入的Sql语句</param>
        /// <returns>DataTable</returns>
        public static DataTable getDataTableFromDataReader(string strSQL)
        {
            SqlDataReader dr = null;
            try
            {
                SqlConnection conn = OpenConnection();
                SqlCommand comm = new SqlCommand(strSQL, conn);
                dr = comm.ExecuteReader();

                DataTable datatable = new DataTable();
                DataTable schemaTable = dr.GetSchemaTable();

                //生成列
                foreach (DataRow row in schemaTable.Rows)
                {
                    DataColumn column = new DataColumn(row["ColumnName"].ToString(), System.Type.GetType(row["DataType"].ToString()));
                    datatable.Columns.Add(column);
                }

                //添加数据
                while (dr.Read())
                {
                    DataRow row = datatable.NewRow();
                    for (int i = 0; i < schemaTable.Rows.Count; i++)
                    {
                        row[i] = dr[i];
                    }
                    datatable.Rows.Add(row);
                    row = null;
                }

                schemaTable = null;

                dr.Close();

                return datatable;
            }
            catch (Exception ex)
            {
                if (!dr.IsClosed)
                    dr.Close();
                throw new Exception(ex.Message);
            }

        }

        /// <summary>
        /// 返回指定Sql语句的DataSet
        /// </summary>
        /// <param name="strSQL">传入的Sql语句</param>
        /// <returns>DataSet</returns>
        public static DataSet getDataSet(string strSQL)
        {
            DataSet ds = new DataSet();
            SqlDataAdapter da = new SqlDataAdapter();
            try
            {
                SqlConnection conn = OpenConnection();
                SqlCommand comm = new SqlCommand(strSQL, conn);
                comm.CommandType = CommandType.Text;
                da.SelectCommand = comm;
                da.Fill(ds);

                DisposeConnection(conn);
                return ds;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }


        /// <summary>
        /// 是否存在值
        /// </summary>
        /// <param name="strSQL"></param>
        /// <returns></returns>
        public static bool isExists(string strSQL)
        {
            try
            {
                SqlConnection conn = OpenConnection();
                SqlCommand comm = new SqlCommand(strSQL, conn);
                SqlDataReader dr = comm.ExecuteReader();

                if (dr.HasRows) return true;

                DisposeConnection(conn);
                return false;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

        }


        #endregion

    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值