asp.net sql无限极分类实例程序

数据库结构

 代码如下 复制代码
create table category
(
    id                  int,               
    clsno            nvarchar(50),       
    clsname       nvarchar(50),                
    clslist            nvarchar(250),         
    clsparentno  nvarchar(50),    
    clslistlen       int
)

 

asp.net程序

 代码如下 复制代码

/**********************************************************************************
 * 程序说明:     生成静态页面类(复杂型.有参数)
 * 创建日期:     2009.6.13
 * 修改日期:     2010.12.18
 * 程序制作:     agui
 * 联系方式:     mailto:354990393@qq.com 
 * ********************************************************************************/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Data;
using PlugNT.Safe;
using PlugNT.Database.Common;
using PlugNT.Database.Common.Simple;
using PlugNT.Custom;
using PlugNT.Cms.Model;

namespace PlugNT.Cms.DAL
{
    /// <summary>
    /// 无限极分类(由于字段的长度只能嵌套25层,且只能用于少量重要型的数据存储)
    /// </summary>
    public class Category
    {

        private static string currTableName = WebConfig.TablePrefix + "category";

        #region 获取

        /// <summary>
        /// 获取clsno
        /// </summary>
        /// <param name="clsno"></param>
        /// <returns></returns>
        public string GetClsno(int id)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select top 1 clsno from " + currTableName);
            strSql.Append(" where id=" + id.ToString());
            return Convert.ToString(DbHelper.GetSingle(strSql.ToString()));

        }

        /// <summary>
        /// 获取clslist
        /// </summary>
        /// <param name="clsname"></param>
        /// <returns></returns>
        public string GetClslistByName(string clsname)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select top 1 clslist from " + currTableName);
            strSql.Append(" where clsname='" + StringHelper.SqlFilter(clsname) + "'");
            return Convert.ToString(DbHelper.GetSingle(strSql.ToString()));
        }

        /// <summary>
        /// 获取clslist
        /// </summary>
        /// <param name="clsno"></param>
        /// <returns></returns>
        public string GetClslistByNo(string clsno)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select top 1 clslist from " + currTableName);
            strSql.Append(" where clsno='" + StringHelper.SqlFilter(clsno) + "'");
            return Convert.ToString(DbHelper.GetSingle(strSql.ToString()));
        }

        /// <summary>
        /// 根据父级编号得到clsname
        /// </summary>
        /// <param name="clsno"></param>
        /// <returns></returns>
        public string GetClsnameByParentNo(string clsno)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("Select top 1 clsname From " + currTableName);
            strSql.Append(" Where clsparentno='" + StringHelper.SqlFilter(clsno) + "'");
            return DbHelper.GetSingle(strSql.ToString()).ToString();
        }

        /// <summary>
        /// 得到父级clsno
        /// </summary>
        /// <param name="clsno"></param>
        /// <returns></returns>
        public string GetParentClsno(string clsno)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("Select top 1 clsparentno From " + currTableName);
            strSql.Append(" Where clsno='" + StringHelper.SqlFilter(clsno) + "'");
            return DbHelper.GetSingle(strSql.ToString()).ToString();
        }

 

        /// <summary>
        /// 得到模型
        /// </summary>
        /// <param name="clsno"></param>
        /// <returns></returns>
        public CategoryInfo GetCategoryInfo(string clsno)
        {
            DataTable dt = GetCategoryTable(clsno);
            CategoryInfo model=null;
            if(dt.Rows.Count>0)
            {
                DataRow dr=dt.Rows[0];
                model=new CategoryInfo();
                model.id=(int)dr["id"];
                model.clsno=dr["clsno"].ToString();
                model.clsname=dr["clsname"].ToString();
                model.clslist=dr["clslist"].ToString();
                model.clsparentno=dr["clsparentno"].ToString();
                model.clslistlen=Int32.Parse(dr["clslistlen"].ToString());
            }
            return model;

        }

        /// <summary>
        /// 得到类别表
        /// </summary>
        /// <param name="clsno"></param>
        /// <returns></returns>
        public DataTable GetCategoryTable(string clsno)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("Select top 1 * From " + currTableName);
            strSql.Append(" Where clsno='" + StringHelper.SqlFilter(clsno) + "'");
            DataTable dt = DbHelper.TabQuery(strSql.ToString());
            return dt;
        }
        #endregion

 

        #region 添加,修改,删除操作

        /// <summary>
        /// 添加一个菜单项
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public bool Add(CategoryInfo model)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("insert into " + currTableName);
            strSql.Append(" (clsno,clsname,clslist,clsparentno,clslistlen)");

            strSql.Append(" values (");
            strSql.Append("'" + StringHelper.SqlFilter(model.clsno) + "',");
            strSql.Append("'" + StringHelper.SqlFilter(model.clsname) + "',");
            strSql.Append("'" + StringHelper.SqlFilter(model.clslist) + "',");
            strSql.Append("'" + StringHelper.SqlFilter(model.clsparentno) + "',");
            strSql.Append(" " +model.clslistlen );

            strSql.Append(")");

            return (DbHelper.ExecuteSql(strSql.ToString()) > 0) ? true : false;
        }

        /// <summary>
        /// 编辑一个菜单项
        /// </summary>
        /// <param name="model"></param>
        /// <param name="isSubModel">是否下级菜单</param>
        /// <returns></returns>
        public bool Update(CategoryInfo model, bool isSubModel)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("update " + currTableName);
            strSql.Append(" set ");
            if (!isSubModel)
            {
                strSql.Append("clsname='" + StringHelper.SqlFilter(model.clsname) + "',");
                strSql.Append("clsparentno='" + StringHelper.SqlFilter(model.clsparentno) + "',");
            }
            strSql.Append("clslist='" + StringHelper.SqlFilter(model.clslist) + "',");
            strSql.Append("clslistlen=" + model.clslistlen );
            strSql.Append(" where clsno='" + StringHelper.SqlFilter(model.clsno) + "' ");

            //同步更新子菜单项
            DataTable  dt = GetOrderSubList(model.clsno);
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    CategoryInfo imodel = new CategoryInfo();
                    string Subclslist = model.clslist + dr["clsno"].ToString().Trim() + ",";
                    imodel.clslist = Subclslist;
                    imodel.clslistlen = model.clslistlen + 1;
                    Update(imodel,true);
                }
            }
            return (DbHelper.ExecuteSql(strSql.ToString()) > 0) ? true : false;
        }

        /// <summary>
        /// 删除菜单项
        /// </summary>
        /// <param name="clsno"></param>
        /// <returns></returns>
        public bool Delete(string clsno)
        {
            StringBuilder strSql = new StringBuilder();
            DataTable dt = GetListRow(clsno);
            if (dt.Rows.Count > 0)
            {
                strSql.Append("Delete From " + currTableName);
                strSql.Append(" where clslist like '" + dt.Rows[0]["clslist"].ToString().Trim() + "%'");
            }
            return (DbHelper.ExecuteSql(strSql.ToString()) > 0) ? true : false;
        }

        #endregion

        #region 获取列表

        /// <summary>
        /// 判断一个父类编号是否存在
        /// </summary>
        public bool ParentExists(string clsno)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select count(1) from " + currTableName);
            strSql.Append(" where clsparentno='" + StringHelper.SqlFilter(clsno) + "'");
            return DbHelper.Exists(strSql.ToString());
        }

        /// <summary>
        /// 获取全部菜单名及列表
        /// </summary>
        /// <returns></returns>
        public DataTable GetList()
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select id,clsno,clsname,clslist,clsparentno,clslistlen from " + currTableName);
            return DbHelper.TabQuery(strSql.ToString());
            //clsno,clsname,clslist,clslistlen,indexfile,listfile,showfile,createpath,ismap
        }

        /// <summary>
        /// 获取菜单列表(排序)
        /// </summary>
        /// <returns></returns>
        public DataTable GetOrderList()
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select id,clsno,clsname,clslist,clsparentno,clslistlen from " + currTableName);
            strSql.Append(" Order By clslist Asc"); // Order By clsorder Asc,clslist Asc
            return DbHelper.TabQuery(strSql.ToString());
        }

        /// <summary>
        /// 获取clsno的包含菜单列表
        /// </summary>
        /// <param name="clsno"></param>
        /// <returns></returns>
        public DataTable GetListRow(string clsno)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select top 1 clsno,clslist,clslistlen from " + currTableName);
            strSql.Append(" where clsno='" + StringHelper.SqlFilter(clsno) + "' ");
            return DbHelper.TabQuery(strSql.ToString());
        }

        /// <summary>
        /// 获取该菜单项的所有子菜单项(因为clslist在表中都不同所以按clsorder排序无效果)
        /// </summary>
        /// <param name="clsno"></param>
        /// <returns></returns>
        public DataTable GetOrderSubList(string clsno)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select id,clsno,clsname,clslist,clsparentno,clslistlen from " + currTableName);
            strSql.Append(" where clsparentno='" + StringHelper.SqlFilter(clsno) + "' ");
            strSql.Append(" Order By clslist Asc");
            return DbHelper.TabQuery(strSql.ToString());
        }

        #endregion

        #region contact me
        public string Help()
        {
            return @"mailto:354990393@qq.com";
        }
        #endregion
    }

}

时间: 2024-08-26 00:12:22

asp.net sql无限极分类实例程序的相关文章

SQL无限极分类查询与上级ID查询命令

首先看一下mysql的这个函数CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL.或许有一个或多个参数. 如果所有参数均为非二进制字符串,则结果为非二进制字符串. 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串.一个数字参数被转化为与之相等的二进制字符串格式:若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col) mysq

php实现smarty模板无限极分类的方法_php实例

本文实例讲述了php实现smarty模板无限极分类的方法.分享给大家供大家参考,具体如下: <?php $conn = mysql_connect("localhost","admin","admin"); mysql_select_db("people_shop",$conn); mysql_query("SET NAMES 'UTF-8'"); $class_arr=array(); $sql =

PHP实现无限极分类图文教程_php实例

一般来说实现无限极分类都是使用递归或者迭代的方式,小伙伴们看下本文的实现方式吧. 1,数据库设计: 2,代码: 复制代码 代码如下: /**  * @author koma  * @todo   PHP无限极分类  */ $cn = mysql_connect('localhost', 'root', '') or die(mysql_error()); mysql_select_db('t', $cn) or die(mysql_error()); mysql_query('set names

深入浅析PHP无限极分类的案例教程_php实例

平时开发中或多或少不可避免会遇到无限极分类的问题,因为效率.逻辑等问题也一直使这类问题比较尖锐.今天我们以yii2框架为基础,栏目无限极为例,对这个问题进行一个简单的处理. 首先我们有一张栏目数据表 tree 表结构如下图(原文有图) 看上去表结构很简单. 我们插入几条测试数据 INSERT INTO `tree` (`id`, `parent_id`, `name`) VALUES (1, 0, 'A'), (2, 0, 'B'), (3, 1, 'a'), (4, 3, 'aa'), (5,

php无限极分类实现的两种解决方法_php实例

今天写了下无限极分类 下面就把代码贴上来了 写的不怎么样. method of classify one 复制代码 代码如下: <?php/* reader: 这是自己写的无限极分类实现方法 里面的编辑方法只是对分类名进行了编辑 没有进行移动操作 小弟能力有限忘大家多多包涵啊  第一种方法:CREATE TABLE `types` (  `type_id` int(11) NOT NULL AUTO_INCREMENT,  `type_name` varchar(20) NOT NULL,  `

JavaScript+CSS无限极分类效果完整实现方法_javascript技巧

本文实例讲述了JavaScript+CSS无限极分类效果完整实现方法.分享给大家供大家参考,具体如下: CSS样式: a {text-decoration:none;} a,a:visited {color:#000;background:inherit;} body {margin:0;padding:20px;font:12px tahoma,宋体,sans-serif;} dt {font-size:22px;font-weight:bold;margin:0 0 0 15px;} dd

实现php无限极分类的方法

今天写了下无限极分类 下面就把代码贴上来了 写的不怎么样. method of classify one <?php /* reader: 这是自己写的无限极分类实现方法 里面的编辑方法只是对分类名进行了编辑 没有进行移动操作 小弟能力有限忘大家多多包涵啊 第一种方法: CREATE TABLE `types` ( `type_id` int(11) NOT NULL AUTO_INCREMENT, `type_name` varchar(20) NOT NULL, `type_p_id` va

php无限极分类递归排序实现方法_php技巧

本文实例讲述了php无限极分类递归排序实现方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: function order ($array,$pid=0){     $arr = array();             foreach($array as $v){         if($v['pid']==$pid){             $arr[] = $v;             $arr = array_merge($arr,order($array,$v['

sqlserver实现树形结构递归查询(无限极分类)

SQL Server 2005开始,我们可以直接通过CTE来支持递归查询,CTE即公用表表达式 百度百科 公用表表达式(CTE),是一个在查询中定义的临时命名结果集将在from子句中使用它.每个CTE仅被定义一次(但在其作用域内可以被引用任意次),并且在该查询生存期间将一直生存.可以使用CTE来执行递归操作.创建的语法是: with <name of you cte>(<column names>) as( <actual query> ) select * from