当前位置:编程学习 > C#/ASP.NET >>

【分享】一个简单的Asp.Net通用SQL数据操作类库

最近一个群里有很多朋友我一些关于Ado.Net的问题
于是重新修正了一下以前用来做私活的小型数据库操作类库,供新手们
使用及学习,以后有人问也可以直接发地址了嘛!-_-!~高手轻拍!

先简单介绍一下这个小型类库,该类库的主要作用指在解决一些数据处理的时候
一些繁琐的问题,比如组建SQL语句,添加Parameter参数等等容易犯错的问题
但是,些类库个人觉得也仅仅适用于中小型项目,稍大型一些的项目还是用ORM用妙
个人觉得小型项目用三层之类的很繁琐,应该可能存在很多时候的修改数据库
之类的,故写了这个经量级开发包!
类库包含三个文件:SQLBuilder.cs  SQL语句组建类
                  SQLHelper.cs SQL数据执行类
                  SQLHandle.cs 数据常用操作处理类
其中SQLHelper和SQLBuilder这里就不做过多的解释,要学习可自行下载
只介绍一下SQLHandle这个类,由于类过长,贴到1楼吧。
本类着重于解决使用时多参数可能不会使用的情况,所以使用了大量的属性及重载方法。
同时也要兼顾同一页面尽量不实例化多个操作对像的可能,故很多地方可能不尽人意
各位在使用的时候也可以根据自己的情况修改。
一个简单的例子:
Never.SQLHandle handle=new Never.SQLHandle("tb_Test");
handle.OrderBy="id desc";
DataSet ds=handle.GetDataSet(5);

下载地址:http://download.csdn.net/source/3380480 --------------------编程问答-------------------- using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace Never
{
    /*
    功能:组建SQL语句并调用Helper类进行数据操作
    编写:Never
    时间:2011-5-11     
    */
    /// <summary>
    /// 数据常用操作处理类
    /// </summary>
    public class SqlHandle
    {
        #region  成员变量、构造器
        private string _TableName;
        private string _IdentitField;
        private int _PageSize;
        private string _FieldList;
        private string _Where;
        private string _OrderBy;
        private List<SqlParameter> _Sps;
        private SqlHelper _SqlHelper;
        private Dictionary<string, object> _FieldValues;
        /// <summary>
        /// 构造器
        /// </summary>
        public SqlHandle() : this("") { }
        /// <summary>
        /// 构造器
        /// </summary>
        /// <param name="TableName">表名</param>
        public SqlHandle(string TableName) : this(TableName, "ID") { }
        /// <summary>
        /// 构造器
        /// </summary>
        /// <param name="TableName">表名</param>
        /// <param name="IdentitField">标识字段名</param>
        public SqlHandle(string TableName, string IdentitField)
        {
            this._TableName = TableName;
            this._IdentitField = IdentitField;
            this._PageSize = 15;
            this._FieldList = "*";
            this._Where = "1=1 ";
            this._OrderBy = string.Format("{0} desc", _IdentitField);
            this._SqlHelper = new SqlHelper();
            this._Sps = new List<SqlParameter>();
            this._FieldValues = new Dictionary<string, object>();
        }
        #endregion

        #region 公共属性
        /// <summary>
        /// 获取或设置表名
        /// </summary>
        public string TableName
        {
            get { return _TableName; }
            set { _TableName = value; }
        }
        /// <summary>
        /// 获取或设置标识字段名
        /// </summary>
        public string IdentitField
        {
            get { return _IdentitField; }
            set { _IdentitField = value; }
        }
        /// <summary>
        /// 获取或设置要返回的字段列表
        /// </summary>
        public string FieldList
        {
            get { return _FieldList; }
            set { _FieldList = value; }
        }
        /// <summary>
        /// 获取或设置分页页大小
        /// </summary>
        public int PageSize
        {
            get { return _PageSize; }
            set { _PageSize = value; }
        }
        /// <summary>
        /// 获取或者设置条件
        /// </summary>
        public string Where
        {
            get { return _Where; }
            set { _Where += value; }
        }
        /// <summary>
        /// 获取或者设置排序
        /// </summary>
        public string OrderBy
        {
            get { return _OrderBy; }
            set { _OrderBy = value; }
        }
        /// <summary>
        /// 获取或设置数据库参数集合
        /// </summary>
        public List<SqlParameter> Parameters
        {
            get { return _Sps; }
            set { _Sps = value; }
        }
        /// <summary>
        /// 获取数据执行Helper对像
        /// </summary>
        public SqlHelper DbHelper
        {
            get { return _SqlHelper; }
        }
        /// <summary>
        /// 获取或设置用户操作字段/值对应字典
        /// </summary>
        public Dictionary<string, object> FieldValues
        {
            get { return _FieldValues; }
            set { _FieldValues = value; }
        }
        #endregion

        #region 添加数据

        /// <summary>
        /// 添加一条数据
        /// </summary>
        /// <param name="FieldValues">字段名/值 的字典集合</param>
        /// <returns>是否成功</returns>
        public bool Insert()
        {
            return Insert(_TableName, _FieldValues);
        }
        /// <summary>
        /// 添加一条数据
        /// </summary>
        /// <param name="TableName">表名</param>
        /// <param name="FieldValues">字段名/值 的字典集合</param>
        /// <returns>是否成功</returns>
        public bool Insert(string TableName, Dictionary<string, object> FieldValues)
        {
            string strSQL;
            SqlParameter[] sps;
            strSQL = SqlBuilder.CreateInsertSQL(_TableName, FieldValues, out sps);
            return _SqlHelper.ExecuteNonQuery(strSQL, sps) > 0;
        }
        /// <summary>
        /// 添加数据,返回标识列
        /// </summary>
        /// <param name="FieldValues">字段名/值 的字典集合</param>
        /// <returns>新添加成功的标识列</returns>
        public int InsertReturnIdentity()
        {
            return InsertReturnIdentity(_TableName, _FieldValues);
        }
        /// <summary>
        /// 添加数据,返回标识列
        /// </summary>
        /// <param name="TableName">表名</param>
        /// <param name="FieldValues">字段名/值 的字典集合</param>
        /// <returns>新添加成功的标识列</returns>
        public int InsertReturnIdentity(string TableName, Dictionary<string, object> FieldValues)
        {
            SqlParameter[] sps;
            string strSQL = SqlBuilder.CreateInsertSQL(TableName, FieldValues, out sps);
            strSQL += "select @@IDENTITY";
            return Convert.ToInt32(_SqlHelper.ExecuteScalar(strSQL, sps));
        }

        #endregion

        #region 更新数据
        /// <summary>
        /// 更新数据
        /// </summary>
        /// <param name="FieldValues">字段名/值 的字典集合</param>
        /// <param name="Where">Id列表</param>
        /// <returns>是否成功</returns>
        public bool UpdateByID(string IdList)
        {
            return Update(_TableName, _FieldValues, string.Format("{0} in({1})", _IdentitField, IdList));
        }
        /// <summary>
        /// 更新数据
        /// </summary>
        /// <param name="FieldValues">字段名/值 的字典集合</param>
        /// <param name="Where">条件</param>
        /// <returns>是否成功</returns>
        public bool Update(string Where, params SqlParameter[] sps)
        {
            return Update(_TableName, _FieldValues, Where);
        }
        /// <summary>
        /// 更新数据
        /// </summary>
        /// <param name="TableName">表名</param>
        /// <param name="FieldValues">字段名/值 的字典集合</param>
        /// <param name="Where">条件</param>
        /// <returns>是否成功</returns>
        public bool Update(string TableName, Dictionary<string, object> FieldValues, string Where)
        {
            string strSQL;
            SqlParameter[] sps;
            strSQL = SqlBuilder.CreatUpdateSQL(TableName, FieldValues, Where, out sps);
            return _SqlHelper.ExecuteNonQuery(strSQL, sps) > 0;
        }

        #endregion

        #region 删除数据

        /// <summary>
        /// 删除指定ID的数据
        /// </summary>
        /// <param name="IDs">ID列表</param>
        /// <returns>是否成功</returns>
        public bool DeleteByIDs(string IDs)
        {
            return DeleteByWhere(string.Format("{0} in({1})", _IdentitField, IDs));
        }
        /// <summary>
        /// 删除指定条件的数据
        /// </summary>
        /// <param name="Where">条件</param>
        /// <param name="sps">动态参数集合</param>
        /// <returns>是否成功</returns>
        public bool DeleteByWhere(string Where, params SqlParameter[] sps)
        {
            return _SqlHelper.ExecuteProNonQuery(SqlBuilder.CreateDeleteSQL(_TableName, Where), sps) > 0;
        }
        /// <summary>
        /// 删除指定条件的数据
        /// </summary>
        /// <param name="TableName">表名</param>
        /// <param name="Where">条件</param>
        /// <param name="sps">动态参数集合</param>
        /// <returns>是否成功</returns>
        public bool DeleteByWhere(string TableName, string Where, params SqlParameter[] sps)
        {
            return _SqlHelper.ExecuteProNonQuery(SqlBuilder.CreateDeleteSQL(TableName, Where), sps) > 0;
        }

        #endregion

        #region 查询一个值

        /// <summary>
        /// 返回一个值
        /// </summary>
        /// <param name="Field">字段</param>
        /// <param name="sps">动态参数集合</param>
        /// <returns>返回值</returns>
        public string GetValue(string Field, params SqlParameter[] sps)
        {
            return GetValue(Field, _Where, sps);
        }
        /// <summary>
        /// 返回一个值
        /// </summary>
        /// <param name="Field">字段</param>
        /// <param name="Where">条件</param>
        /// <param name="sps">动态参数集合</param>
        /// <returns>返回值</returns>
        public string GetValue(string Field, string Where, params SqlParameter[] sps)
        {
            return GetValue(_TableName, Field, Where, sps);
        }
        /// <summary>
        /// 返回一个值
        /// </summary>
        /// <param name="TableName">表名</param>
        /// <param name="Field">字段</param>
        /// <param name="Where">条件</param>
        /// <param name="sps">动态参数集合</param>
        /// <returns>返回值</returns>
        public string GetValue(string TableName, string Field, string Where, params SqlParameter[] sps)
        {
            return _SqlHelper.ExecuteScalar(SqlBuilder.CreateObjectSQL(TableName, Field, Where), sps).ToString();
        }

        #endregion --------------------编程问答--------------------
       #region 查询行
        /// <summary>
        /// 返回一行指定ID的数据
        /// </summary>
        /// <param name="ID">ID值</param>
        /// <returns>DataRow</returns>
        public DataRow GetRowByID(int ID)
        {
            return GetRowByField(_IdentitField, ID.ToString());
        }
        /// <summary>
        /// 返回一行数据
        /// </summary>
        /// <param name="TableName">表名</param>
        /// <param name="Field">字段名</param>
        /// <param name="Value">字段值</param>
        /// <returns>DataRow</returns>
        public DataRow GetRowByField(string Field, string Value)
        {
            return GetRow(_TableName, string.Format("{0}=@Field", Field), new SqlParameter("@Field", Value));
        }
        /// <summary>
        /// 返回一行数据
        /// </summary>
        /// <param name="Where">条件</param>
        /// <returns>DataRow</returns>
        public DataRow GetRow(string Where, params SqlParameter[] sps)
        {
            return GetRow(_TableName, Where, sps);
        }
        /// <summary>
        /// 返回一行数据
        /// </summary>
        /// <param name="TableName">表名</param>
        /// <param name="Where">条件</param>
        /// <returns>DataRow</returns>
        public DataRow GetRow(string TableName, string Where, params SqlParameter[] sps)
        {
            string strSQL = SqlBuilder.CreateSQL(TableName, 1, "*", Where, _OrderBy);
            DataSet ds = _SqlHelper.ExecuteDataSet(strSQL, sps);
            if (ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
            {
                return ds.Tables[0].Rows[0];
            }
            return null;
        }
        #endregion

        #region  查询DataSet

        /// <summary>
        /// 查询数据,返回DataSet
        /// </summary>
        /// <param name="TopNum">要返回的记录条数,为0时返回所有</param>
        /// <returns>DataSet</returns>
        public DataSet GetDataSet(int TopNum)
        {
            return GetDataSet(TopNum, _FieldList, _Where, _Sps.ToArray());
        }
        /// <summary>
        /// 查询数据,返回DataSet
        /// </summary>
        /// <param name="TopNum">要返回的记录条数,为0时返回所有</param>
        /// <param name="FieldList">字段列表</param>
        /// <returns>DataSet</returns>
        public DataSet GetDataSet(int TopNum, string FieldList)
        {
            return GetDataSet(TopNum, FieldList, _Where, _Sps.ToArray());
        }
        /// <summary>
        /// 查询数据,返回DataSet
        /// </summary>
        /// <param name="TopNum">要返回的记录条数,为0时返回所有</param>
        /// <param name="FieldList">字段列表</param>
        /// <param name="Where">条件</param>
        /// <param name="sps">参数集合,可不填写</param>
        /// <returns>DataSet</returns>
        public DataSet GetDataSet(int TopNum, string FieldList, string Where, params SqlParameter[] sps)
        {
            return GetDataSet(TopNum, FieldList, Where, _OrderBy, sps);
        }
        /// <summary>
        /// 查询数据,返回DataSet
        /// </summary>
        /// <param name="TopNum">要返回的记录条数,为0时返回所有</param>
        /// <param name="FieldList">字段列表</param>
        /// <param name="Where">条件</param>
        /// <param name="OrderBy">排序</param>
        /// <param name="sps">参数集合,可不填写</param>
        /// <returns>DataSet</returns>
        public DataSet GetDataSet(int TopNum, string FieldList, string Where, string OrderBy, params SqlParameter[] sps)
        {
            return GetDataSet(_TableName, TopNum, FieldList, Where, OrderBy, sps);
        }
        /// <summary>
        /// 查询数据,返回DataSet
        /// </summary>
        /// <param name="TableName">表名</param>
        /// <param name="TopNum">要返回的记录条数,为0时返回所有</param>
        /// <param name="FieldList">字段列表</param>
        /// <param name="Where">条件</param>
        /// <param name="OrderBy">排序</param>
        /// <param name="sps">参数集合,可不填写</param>
        /// <returns>DataSet</returns>
        public DataSet GetDataSet(string TableName, int TopNum, string FieldList, string Where, string OrderBy, params SqlParameter[] sps)
        {
            string sSQL = SqlBuilder.CreateSQL(TableName, TopNum, FieldList, Where, OrderBy);
            return _SqlHelper.ExecuteDataSet(sSQL, sps);
        }

        #endregion

        #region 查询分页DataSet

        /// <summary>
        /// 返回一个分页数据列表(DataSet)
        /// </summary>
        /// <param name="CurrentPageIndex">当面页所引</param>
        /// <returns>DataSet</returns>
        public DataSet GetPageDataSet(int CurrentPageIndex)
        {
            return GetPageDataSet(CurrentPageIndex, _FieldList);
        }
        /// <summary>
        /// 返回一个分页数据列表(DataSet)
        /// </summary>
        /// <param name="CurrentPageIndex">当面页所引</param>
        /// <param name="FieldList">字段列表</param>
        /// <returns>DataSet</returns>
        public DataSet GetPageDataSet(int CurrentPageIndex, string FieldList)
        {
            return GetPageDataSet(CurrentPageIndex, _FieldList, _Where, _Sps.ToArray());
        }
        /// <summary>
        /// 返回一个分页数据列表(DataSet)
        /// </summary>
        /// <param name="CurrentPageIndex">当面页所引</param>
        /// <param name="FieldList">字段列表</param>
        /// <param name="Where">条件</param>
        /// <param name="sps">动态参数集合</param>
        /// <returns>DataSet</returns>
        public DataSet GetPageDataSet(int CurrentPageIndex, string FieldList, string Where, params SqlParameter[] sps)
        {
            return GetPageDataSet(CurrentPageIndex, FieldList, Where, _OrderBy, sps);
        }
        /// <summary>
        /// 返回一个分页数据列表(DataSet)
        /// </summary>
        /// <param name="PageSize">页大小</param>
        /// <param name="CurrentPageIndex">当面页所引</param>
        /// <param name="FieldList">字段列表</param>
        /// <param name="Where">条件</param>
        /// <param name="OrderBy">排序</param>
        /// <param name="sps">动态参数集合</param>
        /// <returns>DataSet</returns>
        public DataSet GetPageDataSet(int CurrentPageIndex, string FieldList, string Where, string OrderBy, params SqlParameter[] sps)
        {
            return GetPageDataSet(_TableName, _PageSize, CurrentPageIndex, FieldList, Where, OrderBy, sps);
        }
        /// <summary>
        /// 返回一个分页数据列表(DataSet)
        /// </summary>
        /// <param name="TableName">表名</param>
        /// <param name="PageSize">页大小</param>
        /// <param name="CurrentPageIndex">当面页所引</param>
        /// <param name="FieldList">字段列表</param>
        /// <param name="Where">条件</param>
        /// <param name="OrderBy">排序</param>
        /// <param name="sps">动态参数集合</param>
        /// <returns>DataSet</returns>
        public DataSet GetPageDataSet(string TableName, int PageSize, int CurrentPageIndex, string FieldList, string Where, string OrderBy, params SqlParameter[] sps)
        {
            string strSQL = SqlBuilder.CreatePageSQL(TableName, PageSize, CurrentPageIndex, FieldList, _IdentitField, Where, OrderBy);
            return _SqlHelper.ExecuteDataSet(strSQL, sps);
        }

        #endregion
--------------------编程问答--------------------
        #region 查询DataReader

        /// <summary>
        /// 查询数据,返回SqlDataReader
        /// </summary>
        /// <param name="TopNum">要返回的记录条数,为0时返回所有</param>
        /// <returns>SqlDataReader</returns>
        public SqlDataReader GetReader(int TopNum)
        {
            return GetReader(TopNum, _FieldList, _Where, _Sps.ToArray());
        }
        /// <summary>
        /// 查询数据,返回SqlDataReader
        /// </summary>
        /// <param name="TopNum">要返回的记录条数,为0时返回所有</param>
        /// <param name="FieldList">字段列表</param>
        /// <returns>SqlDataReader</returns>
        public SqlDataReader GetReader(int TopNum, string FieldList)
        {
            return GetReader(TopNum, FieldList, _Where, _Sps.ToArray());
        }
        /// <summary>
        /// 查询数据,返回SqlDataReader
        /// </summary>
        /// <param name="TopNum">要返回的记录条数,为0时返回所有</param>
        /// <param name="FieldList">字段列表</param>
        /// <param name="Where">条件</param>
        /// <param name="sps">参数集合,可不填写</param>
        /// <returns>SqlDataReader</returns>
        public SqlDataReader GetReader(int TopNum, string FieldList, string Where, params SqlParameter[] sps)
        {
            return GetReader(TopNum, FieldList, Where, _OrderBy, sps);
        }
        /// <summary>
        /// 查询数据,返回SqlDataReader
        /// </summary>
        /// <param name="TopNum">要返回的记录条数,为0时返回所有</param>
        /// <param name="FieldList">字段列表</param>
        /// <param name="Where">条件</param>
        /// <param name="OrderBy">排序</param>
        /// <param name="sps">参数集合,可不填写</param>
        /// <returns>SqlDataReader</returns>
        public SqlDataReader GetReader(int TopNum, string FieldList, string Where, string OrderBy, params SqlParameter[] sps)
        {
            return GetReader(_TableName, TopNum, FieldList, Where, OrderBy, sps);
        }
        /// <summary>
        /// 查询数据,返回SqlDataReader
        /// </summary>
        /// <param name="TableName">表名</param>
        /// <param name="TopNum">要返回的记录条数,为0时返回所有</param>
        /// <param name="FieldList">字段列表</param>
        /// <param name="Where">条件</param>
        /// <param name="OrderBy">排序</param>
        /// <param name="sps">参数集合,可不填写</param>
        /// <returns>SqlDataReader</returns>
        public SqlDataReader GetReader(string TableName, int TopNum, string FieldList, string Where, string OrderBy, params SqlParameter[] sps)
        {
            string sSQL = SqlBuilder.CreateSQL(TableName, TopNum, FieldList, Where, OrderBy);
            return _SqlHelper.ExecuteReader(sSQL, sps);
        }

        #endregion

        #region 查询分页DataReader

        /// <summary>
        /// 返回一个分页数据列表(SqlDataReader)
        /// </summary>
        /// <param name="CurrentPageIndex">当面页所引</param>
        /// <returns>SqlDataReader</returns>
        public SqlDataReader GetPageReader(int CurrentPageIndex)
        {
            return GetPageReader(CurrentPageIndex, _FieldList);
        }
        /// <summary>
        /// 返回一个分页数据列表(SqlDataReader)
        /// </summary>
        /// <param name="CurrentPageIndex">当面页所引</param>
        /// <param name="FieldList">字段列表</param>
        /// <returns>SqlDataReader</returns>
        public SqlDataReader GetPageReader(int CurrentPageIndex, string FieldList)
        {
            return GetPageReader(CurrentPageIndex, _FieldList, _Where, _Sps.ToArray());
        }
        /// <summary>
        /// 返回一个分页数据列表(SqlDataReader)
        /// </summary>
        /// <param name="CurrentPageIndex">当面页所引</param>
        /// <param name="FieldList">字段列表</param>
        /// <param name="Where">条件</param>
        /// <param name="sps">动态参数集合</param>
        /// <returns>SqlDataReader</returns>
        public SqlDataReader GetPageReader(int CurrentPageIndex, string FieldList, string Where, params SqlParameter[] sps)
        {
            return GetPageReader(CurrentPageIndex, FieldList, Where, _OrderBy, sps);
        }
        /// <summary>
        /// 返回一个分页数据列表(SqlDataReader)
        /// </summary>
        /// <param name="PageSize">页大小</param>
        /// <param name="CurrentPageIndex">当面页所引</param>
        /// <param name="FieldList">字段列表</param>
        /// <param name="Where">条件</param>
        /// <param name="OrderBy">排序</param>
        /// <param name="sps">动态参数集合</param>
        /// <returns>SqlDataReader</returns>
        public SqlDataReader GetPageReader(int CurrentPageIndex, string FieldList, string Where, string OrderBy, params SqlParameter[] sps)
        {
            return GetPageReader(_TableName, _PageSize, CurrentPageIndex, FieldList, Where, OrderBy, _Sps.ToArray());
        }
        /// <summary>
        /// 返回一个分页数据列表(SqlDataReader)
        /// </summary>
        /// <param name="TableName">表名</param>
        /// <param name="PageSize">页大小</param>
        /// <param name="CurrentPageIndex">当面页所引</param>
        /// <param name="FieldList">字段列表</param>
        /// <param name="Where">条件</param>
        /// <param name="OrderBy">排序</param>
        /// <param name="sps">动态参数集合</param>
        /// <returns>SqlDataReader</returns>
        public SqlDataReader GetPageReader(string TableName, int PageSize, int CurrentPageIndex, string FieldList, string Where, string OrderBy, params SqlParameter[] sps)
        {
            string strSQL = SqlBuilder.CreatePageSQL(TableName, PageSize, CurrentPageIndex, FieldList, _IdentitField, Where, OrderBy);
            return _SqlHelper.ExecuteReader(strSQL, sps);
        }

        #endregion

        #region 其它

        /// <summary>
        /// 添加一个Parameter参数
        /// </summary>
        /// <param name="Key">参数名称</param>
        /// <param name="Value">参数值</param>
        public void ParameterAdd(string Key, object Value)
        {
            _Sps.Add(new SqlParameter(Key, Value));
        }
        /// <summary>
        /// 清空参数
        /// </summary>
        public void ParameterClear()
        {
            _Sps.Clear();
        }
        /// <summary>
        /// 返回记录条数
        /// </summary>
        /// <returns>记录条数</returns>
        public int GetCount()
        {
            return GetCount(_Where, _Sps.ToArray());
        }
        /// <summary>
        /// 返回记录条数
        /// </summary>
        /// <param name="Where">条件</param>
        /// <param name="sps">动态参数集合</param>
        /// <returns>记录条数</returns>
        public int GetCount(string Where, params SqlParameter[] sps)
        {
            return Convert.ToInt32(GetValue("Count(*)", Where, sps));
        }
        /// <summary>
        /// 获取类别表某个类别下级类别ID列表,多个ID用','号隔开
        /// </summary>
        /// <param name="TableName">表名</param>
        /// <param name="IDFieldName">ID字段名</param>
        /// <param name="ParentFieldName">父级字段名</param>
        /// <param name="ParentTypeID">父级字段值</param>
        /// <param name="Where">条件</param>
        /// <param name="OrderBy">排序</param>
        /// <param name="sps">动态参数集合,可不埴</param>
        /// <returns>类别ID列表</returns>
        public string GetChildIDs(string TableName, string IDField, string ParentField, int ParentTypeID, string Where, string OrderBy, params SqlParameter[] sps)
        {
            string sSql = string.Format("select {0} from {1} where {2}={3}", TableName, IDField, ParentField, ParentTypeID);
            if (Where != "")
            {
                sSql = string.Format(" and {0}", Where);
            }
            if (OrderBy != "")
            {
                sSql += string.Format(" Order by {0}", OrderBy);
            }
           // sSql = SqlBuilder.CreateSQL(TableName, 0, "*", string.Format("{0}={1}", ParentField, ParentTypeID));
            SqlDataReader dr = _SqlHelper.ExecuteReader(sSql, sps);
            string r = "";
            while (dr.Read())
            {
                r += dr[0].ToString() + ",";
                r += GetChildIDs(TableName, IDField, ParentField, Convert.ToInt16(dr[0]), Where, OrderBy, sps);
            }
            dr.Close();
            return r;
        }
        /// <summary>
        /// 获取类别表某个类别下所有的下级类别ID列表,指定父级字段为ParentID
        /// </summary>
        /// <param name="TableName">表名</param>
        /// <param name="Where">父级字段值</param>
        /// <param name="Where">条件</param>
        /// <param name="OrderBy">排序</param>
        /// <param name="sps">动态参数集合,可不埴</param>
        /// <returns>下级类别ID列表</returns>
        public string GetChildIDs(string TableName, int ParentTypeID, string Where, string OrderBy, params SqlParameter[] sps)
        {
            return GetChildIDs(TableName, "ID", "ParentID", ParentTypeID, Where, OrderBy, sps);
        }

        #endregion

    }
}
--------------------编程问答-------------------- 呵呵 还不错。 --------------------编程问答-------------------- so long... --------------------编程问答-------------------- 不错·我又来了· --------------------编程问答--------------------
引用 5 楼 q107770540 的回复:
so long...

  CSDN还木有升级,这代码贴得蛋疼,不能收缩,杯催! --------------------编程问答-------------------- so so long long long ... --------------------编程问答-------------------- --------------------编程问答-------------------- 又看到这种代码,我不得不说说。

以为给实体类赋值,然后传到Helper类里面,拼接字符串就达到一种很高境界。

极高的代码重用,极少的代码编写量。

some fucking BLL、DAL 都不用动了。

比如 http://topic.csdn.net/u/20110602/23/a22f7419-bd73-4ccf-b1a1-6f3b5437ffe9.html

想得不够深远导致对“重用性”狭窄的理解。

加入,我要给所有模块都加上日志功能呢?
假如要作精确到字段的权限呢?
假如要暴露接口给第三方呢?
假如要作一个联网版和一个单机版或者其他阉割过的版本呢?
随着测试部门的深入测试,判断分析的代码会越来越饱满,你这种做法能否适应。

数据访问层的东西在软件发布以后都是定死的了,你的代码总是在不断进行判断分析、拼接字符串,性能很低的。而且注入漏洞很明显。

有代码生成器在,数据访问层的工作量很少的,很多工作都在界面处理、业务逻辑上了。

看到你的代码没有跟数据库映射好数据类型、数据长度,我对健壮性表示忧虑。

其实要偷懒的话,用 DataSet + SqlCommandBuilder 实现添加、删除、修改代码超少。
而且健壮性、安全性都是有保障的。
最绝的是修改了哪个字段就update哪个字段。 --------------------编程问答--------------------
引用 10 楼 winner2050 的回复:
又看到这种代码,我不得不说说。

以为给实体类赋值,然后传到Helper类里面,拼接字符串就达到一种很高境界。

极高的代码重用,极少的代码编写量。

some fucking BLL、DAL 都不用动了。

比如 http://topic.csdn.net/u/20110602/23/a22f7419-bd73-4ccf-b1a1-6f3b5437ffe9.html

想得……

--------------------编程问答--------------------
引用 10 楼 winner2050 的回复:
又看到这种代码,我不得不说说。

以为给实体类赋值,然后传到Helper类里面,拼接字符串就达到一种很高境界。

极高的代码重用,极少的代码编写量。

some fucking BLL、DAL 都不用动了。

比如 http://topic.csdn.net/u/20110602/23/a22f7419-bd73-4ccf-b1a1-6f3b5437ffe9.html

想得不……

   呵呵,你说的问题确实存在,这里我已经说明了,此代码只适合做一些小型项目,如果做稍大一点的项目一般我会使用ORM,这些代码也不是我要表现啥,只是给新手学习和使用,其它的就不多说了,这种东西的价值并不高,也不在于我要炫耀啥,至于想得不够深远导致对“重用性”狭窄的理解。我保留意见,个人认为一般的中小项目特别是WEB项目很少有使用如你所表达的东西,并且从我做私单的小项目来说,很可能频繁添加字段的工作,及时有代码生成器,也不见得快,性能就不说了,而且相关的查询大部分都类似,个人觉得实体层完全可以舍去,但是可以适当修改一下SQLHANDLE然后写逻辑层继承的方式,如果硬要用ORM,使用ADO.NET Entity Framework无疑是个不错的选择,至于SQL注入,完全可以纯参数化,安全性不说很高,但是对于一般的网站项目是够了,再次申明,此类并不适合做大项目,仅仅是学习一下ado.net的一种方式而已。! --------------------编程问答--------------------
引用 12 楼 crazytype 的回复:
引用 10 楼 winner2050 的回复:
又看到这种代码,我不得不说说。

以为给实体类赋值,然后传到Helper类里面,拼接字符串就达到一种很高境界。

极高的代码重用,极少的代码编写量。

some fucking BLL、DAL 都不用动了。

比如 http://topic.csdn.net/u/20110602/23/a22f7419-bd73-4ccf-b1a……


up --------------------编程问答-------------------- 不得不说一下,没有一种架构是绝对适合任何项目的,如果一个企业网站要使用标准分层,那么我认为是自找苦吃,修改一下数据库,不得不修改实体层,数据访问层,而且一样,也是字符串拼接,逻辑层一样需要验证where或者 order by,难不成每一种带where不带where,带order by 不带order by全部写上重载?效率极低,而且逻辑层大同小异,何不直接sqlhelper然后直接写sql语句加参数化来得好,设计模式也得有针对,不是随便啥都扯上去好,难道我做个企业网站还得考虑它的扩展性?安全方面,其实都 一样,养成使用参数化的习惯一般来说小项目够用,至少我开发了这么多中小型项目还没存在严重的安全问题,另一方面,DAL层上是不动没逻辑,但逻辑层上就不用处理了?一个地方的判断和另一个地方的判断不一致?工厂模式、ADO.NET Entity Framework、NHibernate都做过项目,但是小型项目真的适合吗?
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,