• 主题:针对小外包写的一个数据库访问基类


    //--名称:SQL数据库访问基类
    //--功能:一般ADO.NET原理,数据装箱坼箱及通用数据库控件绑定
    //--背景:针对一些个人形式外包,要求快速开发的数据库中小型项目特写此类供页面直接调用
    //--创建人:KingWei
    //--创建日期:2010-02-20
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Collections.Generic;
    using System.Text;
    using System.Configuration;
    using System.Web.UI.WebControls;


    namespace KingWei
    {
        /// <summary>
        ///  数据库访问基类(for SQL)
        /// </summary>
        public class DBHelper:IDisposable
        {
            #region 成员
            private SqlConnection Conn = null;
            private SqlTransaction tran = null;
            /// <summary>
            /// 事务标识
            /// </summary>
            public bool IsTran { get; set; }
            #endregion
           
            #region 构造函数,SqlConnection对象初始化
            public DBHelper()
            {
                Conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
            }
           
            public DBHelper(string ConnectionKey)
            {
                Conn = new SqlConnection(ConfigurationManager.ConnectionStrings[ConnectionKey].ConnectionString);
            }
            #endregion

            #region 数据库事务
            /// <summary>
            /// 事务开始
            /// </summary>
            public void BeginTran()
            {
                OpenDB();
                tran = Conn.BeginTransaction(IsolationLevel.ReadCommitted);
                IsTran = true;
            }

            /// <summary>
            /// 回滚事务
            /// </summary>
            public void RollbackTran()
            {
                tran.Rollback();
                IsTran = false;
            }

            /// <summary>
            /// 提交事务
            /// </summary>
            public void CommitTran()
            {
                tran.Commit();
                IsTran = false;
            }
            #endregion

            #region SqlParameter对象创建

            private SqlParameter CreateSqlParameter(string paraName,DbType paraType,int paraSize, ParameterDirection paraDirection, object paraValue)
            {
                SqlParameter para = new SqlParameter();
                para.DbType = paraType;
                para.Direction = paraDirection;
                para.ParameterName = paraName;
                if (paraSize > 0)
                {
                    para.Size = paraSize;
                }
                para.Value = paraValue;
                return para;
            }

            public SqlParameter CreateInSqlParameter(string paraName, DbType paraType, object paraValue)
            {
                return CreateSqlParameter(paraName, paraType, 0, ParameterDirection.Input, paraValue);
            }

            public SqlParameter CreateInSqlParameter(string paraName, DbType paraType,int paraSize, object paraValue)
            {
                return CreateSqlParameter(paraName, paraType, paraSize, ParameterDirection.Input, paraValue);
            }

            public SqlParameter CreateOutSqlParameter(string paraName, DbType paraType, object paraValue)
            {
                return CreateSqlParameter(paraName, paraType, 0, ParameterDirection.Output, paraValue);
            }

            public SqlParameter CreateOutSqlParameter(string paraName, DbType paraType, int paraSize, object paraValue)
            {
                return CreateSqlParameter(paraName, paraType, paraSize, ParameterDirection.Output, paraValue);
            }
            #endregion

            #region 常用ADO.NET方法
            /// <summary>
            /// OpenDB
            /// </summary>
            private void OpenDB()
            {
                if (Conn.State != ConnectionState.Open)
                {
                    try
                    {
                        Conn.Open();
                    }
                    catch (SqlException ex)
                    {
                        throw ex;
                    }
                }
            }
            /// <summary>
            /// 初始化一个SqlCommand对象
            /// </summary>
            private void CreateCommand(SqlCommand cmd,CommandType cmdType, string cmdText, SqlParameter[] SqlParas)
            {
                if (IsTran)
                {
                    cmd.Transaction = tran;
                }
                else
                {
                    OpenDB();
                  
                }
                cmd.Connection = Conn;
                cmd.CommandType = cmdType;
                cmd.CommandText = cmdText;
                if (SqlParas.Length > -1)
                {
                    foreach (SqlParameter p in SqlParas)
                    {
                        cmd.Parameters.Add(p);
                    }
                }
            }

            /// <summary>
            /// 执行SQL返回一个DataSet
            /// </summary>
            public DataSet ExecuteQuery(CommandType cmdType,string cmdText,SqlParameter[] SqlParas)
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    CreateCommand(cmd, cmdType, cmdText, SqlParas);
                    using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                    {
                        DataSet ds = new DataSet();
                        da.Fill(ds);
                        return ds;
                    }
                }
            }

            /// <summary>
            /// 执行SQL返回受影响的行数
            /// </summary>
            public int ExecuteNonQuery(CommandType cmdType, string cmdText, SqlParameter[] SqlParas)
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    CreateCommand(cmd, cmdType, cmdText, SqlParas);
                    return cmd.ExecuteNonQuery();
                }
            }

            /// <summary>
            /// 重载一:执行SQL返回第一行第一列的值
            /// </summary>
            public object ExecuteScalar(CommandType cmdType, string cmdText, SqlParameter[] SqlParas)
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    CreateCommand(cmd, cmdType, cmdText, SqlParas);
                    return cmd.ExecuteScalar();
                }
            }

            /// <summary>
            /// 重载二:执行SQL返回第一行第一列的值,可传参取代返回值为NULL的情况
            /// </summary>
            public string ExecuteScalar(CommandType cmdType, string cmdText, SqlParameter[] SqlParas,string WhenNull)
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    CreateCommand(cmd, cmdType, cmdText, SqlParas);
                    object result = cmd.ExecuteScalar();
                    return result == null?WhenNull:result.ToString();
                }
            }

            /// <summary>
            /// 执行一段SQL,返回一个DataReader对象
            /// </summary>
            public SqlDataReader ExecuteDataReader(CommandType cmdType, string cmdText, SqlParameter[] SqlParas)
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    CreateCommand(cmd, cmdType, cmdText, SqlParas);
                    return cmd.ExecuteReader(CommandBehavior.CloseConnection);
                }
            }

            /// <summary>
            /// 常用分页方法
            /// </summary>
            /// <param name="PageSize">页面大小</param>
            /// <param name="RecordCount">记录总量</param>
            /// <param name="CurruntPageIndex">当前位置</param>
            /// <param name="TableName">表名/视图名</param>
            /// <param name="Condition">查询条件</param>
            /// <param name="IsAsc">是否升序排序</param>
            /// <param name="OrderBy">按哪些字段排序</param>
            /// <returns></returns>
            private SqlDataReader GetPageSql(string condition, Int16 pageSize, Int16 pageIndex, string tbNames, string sortNames, bool sortType)
            {
                System.Text.StringBuilder PageSql = new System.Text.StringBuilder();
                string tbname, tbsortname, type;
                type = sortType ? "ASC" : "DESC";
                tbname = tbNames.ToUpper().IndexOf("SELECT") >= 0 ? "(" + tbNames + ")" + " as DBHelper" : tbNames + " as DBHelper";
                tbsortname = tbNames.ToUpper().IndexOf("SELECT") >= 0 ? "(" + tbNames + ") as DBHelperID" : tbNames + " as DBHelperID";
                if (pageIndex == 1)
                {
                    PageSql.Append("select top " + pageSize.ToString() + " DBHelper.* from " + tbname + (!string.IsNullOrEmpty(condition) ? " where " + condition : string.Empty) + " order by " + sortNames + " " + type);
                }
                else
                {
                    PageSql.AppendFormat("Select top {0}  DBHelper.* from ", pageSize);
                    PageSql.AppendFormat("{0}", tbname);
                    PageSql.AppendFormat(" where DBHelper.{0} not in(select top {1} DBHelperID.{0}",
                        sortNames.Substring(sortNames.LastIndexOf(",") + 1, sortNames.Length - sortNames.LastIndexOf(",") - 1),
                        pageSize * (pageIndex - 1));
                    PageSql.AppendFormat(" from {0}", tbsortname);
                    if (!string.IsNullOrEmpty(condition))
                    {
                        PageSql.AppendFormat(" where {0} order by {1} {2}) and {0}", condition, sortNames, type);
                    }
                    else
                    {
                        PageSql.AppendFormat(" order by {0} {1})", sortNames, type);
                    }
                    PageSql.AppendFormat(" order by {0} {1}", sortNames, type);
                }
                return ExecuteDataReader(CommandType.Text, PageSql.ToString(), null);
            }

            /// <summary>
            /// 手动关闭数据库连接对象
            /// </summary>
            public void CloseDB()
            {
                if (!object.Equals(Conn, null) && Conn.State != ConnectionState.Closed)
                {
                    Conn.Close();
                }
            }
            #endregion

            #region 数据类型转换

            public string ToStr(object obj)
            {
                if (object.Equals(obj, DBNull.Value) || string.IsNullOrEmpty(obj.ToString()))
                    return "";
                else
                    return obj.ToString();
            }

            public int ToInt(object obj)
            {
                if (object.Equals(obj,DBNull.Value)||object.Equals(obj, null) || string.IsNullOrEmpty(obj.ToString()))
                    return 0;
                else
                    return Convert.ToInt32(obj);
            }

            public Int16 ToInt16(object obj)
            {
                if (object.Equals(obj, DBNull.Value) || object.Equals(obj, null) || string.IsNullOrEmpty(obj.ToString()))
                    return 0;
                else
                    return Convert.ToInt16(obj);
            }

            public double ToDouble(object obj)
            {
                if (object.Equals(obj, DBNull.Value) || object.Equals(obj, null) || string.IsNullOrEmpty(obj.ToString()))
                    return 0;
                else
                    return Convert.ToDouble(obj);
            }

            public Single ToSingle(object obj)
            {
                if (object.Equals(obj, DBNull.Value) || object.Equals(obj, null) || string.IsNullOrEmpty(obj.ToString()))
                    return 0;
                else
                    return Convert.ToSingle(obj);
            }

            public bool ToBool(object obj)
            {
                if (object.Equals(obj, DBNull.Value) || object.Equals(obj, null))
                    return false;
                else
                    return Convert.ToBoolean(obj);
            }

            public DateTime ToDateTime(object obj)
            {
                try
                {
                    DateTime dt;
                    DateTime.TryParse(Convert.ToString(obj), out dt);
                    return dt;
                }
                catch
                {
                    return DateTime.MinValue;
                }
            }

            public DateTime? ToNullDate(object obj)
            {
                if (object.Equals(obj, DBNull.Value))
                    return null;
                else
                    try
                    {
                        DateTime dt;
                        DateTime.TryParse(Convert.ToString(obj), out dt);
                        return dt;
                    }
                    catch
                    {
                        return null;
                    }
            }

            public int? ToNullInt(object obj)
            {
                if (object.Equals(obj, DBNull.Value) || object.Equals(obj, null) || string.IsNullOrEmpty(obj.ToString()))
                    return null;
                else
                    return Convert.ToInt32(obj);
            }

            public Int16? ToNullInt16(object obj)
            {
                if (object.Equals(obj, DBNull.Value) || object.Equals(obj, null) || string.IsNullOrEmpty(obj.ToString()))
                    return null;
                else
                    return Convert.ToInt16(obj);
            }

            public double? ToNulldouble(object obj)
            {
                if (object.Equals(obj, DBNull.Value) || object.Equals(obj, null) || string.IsNullOrEmpty(obj.ToString()))
                    return null;
                else
                    return Convert.ToDouble(obj);
            }

            public Single? ToNullSingle(object obj)
            {
                if (object.Equals(obj, DBNull.Value) || object.Equals(obj, null) || string.IsNullOrEmpty(obj.ToString()))
                    return null;
                else
                    return Convert.ToSingle(obj);
            }

            #endregion

            #region 常用控件数据绑定
            public enum SelType
            {
                ByValue,
                ByText
            }

            /// <summary>
            /// 列表型数据控件绑定
            /// </summary>
            public void ListBind(ListControl LstCtrl,object Lst)
            {
                LstCtrl.DataSource = Lst;
                LstCtrl.DataBind();
            }

            /// <summary>
            /// 绑定GridView
            /// </summary>
            public void GrdBind(GridView grdView, object Lst)
            {
                grdView.DataSource = Lst;
                grdView.DataBind();
            }
            /// <summary>
            /// 绑定GridView,并为指定的一列加上序号
            /// </summary>
            public void GrdBind(GridView grdView, object Lst, int InsertNo)
            {
                GrdBind(grdView, Lst);
                for (int i = 0; i < grdView.Rows.Count; i++)
                {
                    grdView.Rows[i].Cells[InsertNo].Text = (i + 1).ToString();
                }
            }

            /// <summary>
            /// 绑定DropDownList
            /// </summary>
            public void DdlBind(DropDownList ddlList, object Lst)
            {
                ddlList.DataSource = Lst;
                ddlList.DataBind();
            }
            /// <summary>
            /// 绑定DropDownList,指定文本及值的绑定项
            /// </summary>
            public void DdlBind(DropDownList ddlList, Object Lst, string TextField, string ValueField)
            {
                ddlList.DataSource = ddlList;
                ddlList.DataTextField = TextField;
                ddlList.DataValueField = ValueField;
                ddlList.DataBind();
            }
            /// <summary>
            /// 绑定DropDownList,指定文本及值的绑定项,插入一个名为defaultStr的默认项
            /// </summary>
            public void DdlBind(DropDownList ddlList, Object Lst, string TextField, string ValueField, string defaultStr)
            {
                DdlBind(ddlList, Lst, TextField, ValueField);
                ddlList.Items.Insert(0, defaultStr);
            }
            /// <summary>
            /// 绑定DropDownList,指定文本及值的绑定项,使DropDownList选择默认的值
            /// </summary>
            public void DdlBind(DropDownList ddlList, Object Lst, string TextField, string ValueField,SelType FindType, string FindStr)
            {
                DdlBind(ddlList, Lst, TextField, ValueField);
                int selectIndex = -1;
                for (int i = 0; i < ddlList.Items.Count; i++)
                {
                    switch (FindType)
                    {
                        case SelType.ByText:
                            if (ddlList.Items[i].Text == FindStr)
                            {
                                selectIndex= i;
                            }
                            break;
                        case SelType.ByValue:
                            if (ddlList.Items[i].Value == FindStr)
                            {
                                selectIndex = i;
                            }
                            break;
                    }
                    if (selectIndex > -1)
                    {
                        ddlList.SelectedIndex = selectIndex;
                        break;
                    }
                }
            }

            #endregion

            #region IDisposable 成员

            public void Dispose()
            {
                if(Conn != null)
                    Conn.Dispose();
                if (tran != null)
                    tran.Dispose();
            }

            #endregion
        }
    }

  • 相关阅读:
    HDU 2236 无题Ⅱ
    Golden Tiger Claw(二分图)
    HDU 5969 最大的位或 (思维,贪心)
    HDU 3686 Traffic Real Time Query System (图论)
    SCOI 2016 萌萌哒
    Spring Boot支持控制台Banner定制
    构建第一个Spring Boot程序
    Spring Boot重要模块
    Java fastjson JSON和String互相转换
    BCompare 4 Windows激活方法【试用期30天重置】
  • 原文地址:https://www.cnblogs.com/chenbg2001/p/1717942.html
Copyright © 2020-2023  润新知