`
kinglot
  • 浏览: 18026 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

阅读更多
//--名称: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
    }
}

 

分享到:
评论
1 楼 sea7 2010-06-21  
不讨论这种东西有没有用,SqlParameter 可以让你的代码免于SQL Injection

相关推荐

    基于连接池数据库操作基类

    首先,"基于连接池数据库操作基类"是指设计一个基类,该基类使用数据库连接池技术来管理数据库连接。数据库连接池是一种管理数据库连接的机制,它可以重复使用已打开的连接,而不是每次需要时都创建新的连接,这样...

    数据库访问基类(access和MSSQL)

    数据库访问基类是软件开发中一个重要的设计模式,主要用于封装数据库操作,降低代码的耦合度,提高可维护性和可扩展性。在这个特定的案例中,我们有一个名为"数据库访问基类(access和MSSQL)"的基类,它支持两种常见...

    C# 数据库操作基类

    C# 数据库操作基类 包括存储过程和事务处理

    数据库操作基类

    数据库操作基类是编程中一个重要的设计模式,它通常用于封装数据库访问的通用逻辑,提供一个统一的接口供其他类使用。这样的设计可以提高代码的可重用性、可维护性和可扩展性,同时降低耦合度。在这个基类中,我们...

    vc数据库操作基类ADO C++

    这个“vc数据库操作基类ADO C++”的代码,可能是作者在实际项目中积累的经验结晶,对于初学者来说,它是一个很好的学习资源,可以帮助理解如何在C++中高效地利用ADO进行数据库操作。同时,对于有经验的开发者,它...

    C#数据库操作基类

    c#数据操作基类如何将Sql Server 表的结构导出到Word或Excel

    C# 数据库连接基类 DataBas

    总之,"C# 数据库连接基类 DataBas" 是一个核心的数据库访问层,它封装了与数据库的连接、查询和CRUD操作,同时也提供了数据分页的功能。理解和使用这样的基类,能够帮助开发者更高效地管理数据库操作,提高应用程序...

    MFC数据库基类模板

    CRecordset的一个重要特性是支持动态集,即数据在后台被修改时,记录集能够反映出这些变化。 2. DAO类库:在MFC中,CDaoDatabase类用于连接到DAO数据源,而CDaoRecordset类则用于处理数据库记录。与ODBC相比,DAO...

    orcal连接数据库的基类for vs

    总结,"orcal连接数据库的基类for vs"旨在提供一个基础的C#框架,帮助开发者快速地进行Oracle数据库操作,包括JSON数据的支持和事务处理。通过这样的基类,开发者可以专注于业务逻辑,而不是重复的数据库连接代码。...

    C# ADO.NET数据库操作基类(不好用你拿砖头拍)

    本文将深入探讨使用C#和ADO.NET进行数据库操作的基础知识,特别关注的是一个名为"SqlHelper.cs"的文件,这可能是一个封装了基本数据库操作的类。 首先,我们来看一下ADO.NET的基本结构。它主要包括四个主要组件:...

    PHP基于单例模式实现的数据库操作基类

    本文实例讲述了PHP基于单例模式实现的数据库操作基类。分享给大家供大家参考,具体如下: 配置文件: &lt;?php $db = array( 'host'=&gt;'localhost', 'user'=&gt;'root', 'password'=&gt;'', 'database'=&gt;'test', ) ?&...

    数据访问基类的设计方法

    1. **接口设计**:首先,我们需要定义一个清晰的接口,这个接口将包含所有用于与数据库交互的方法,如查询、添加、删除和更新数据。这些方法应具有通用的输入参数,如SQL语句、参数数组等,以便于子类继承和实现。 ...

    .Net数据库操作基类 - 通用于Windows及Linux的Mono环境

    1、.Net数据库操作基类,支持Mysql、Sql Server、Oracle等多种数据库; 2、同一项目可以支持调用不同数据库,只需在调用前调用DataBaseOperator.Init方法; 3、采用绑定变量调用,参数通过ParamCollections对象实现...

    Net连接数据库基类 SQLHelper

    Net连接数据库基类 SQLHelper

    安卓数据库基类

    "安卓数据库基类"通常指的是为Android应用程序创建一个基础数据库操作类,它提供了一系列通用的方法来执行CRUD(Create, Read, Update, Delete)操作,使开发者可以更加便捷地进行数据库交互。这种基类的实现通常...

    使用设计模式构建通用数据库访问类.

    本文将围绕“使用设计模式构建通用数据库访问类”这一主题,深入探讨如何通过抽象基类与继承机制,结合具体的设计模式,如工厂模式和策略模式,来创建一个灵活且高效的数据库访问层。 ### 设计模式的重要性 设计...

    c#通用数据库访问类

    "c#通用数据库访问类"是一个旨在简化数据库操作的类库,它支持多种数据库系统,如Sql Server 2000和Access,并且具有可扩展性,可以进一步支持Oracle和其他数据库。 首先,让我们深入理解这个类库的核心概念——...

    SQL数据库基类

    - 维护简单:所有的数据库访问逻辑都集中在一个地方,便于维护和升级。 - 安全性增强:可以对数据库连接字符串进行统一管理,减少硬编码造成的安全风险。 ### 常用方法及实现 #### 1. 连接数据库 - **方法实现*...

    C#基类整理

    5. **SqlHelper基类**:SqlHelper是用于简化数据库访问的类,常见于C#的项目中。它封装了ADO.NET的部分操作,如执行SQL语句、事务处理等,使得数据库操作更加简洁和安全。通常,SqlHelper会包含ExecuteNonQuery、...

    c# 数据库访问类(适用于所有数据库)

    在数据库访问的上下文中,这意味着我们可以设计一个基类,定义基本的数据库操作方法,如连接、查询、插入、更新和删除,然后为每种特定类型的数据库创建一个子类来实现这些方法。 例如,我们可以创建一个名为`...

Global site tag (gtag.js) - Google Analytics