• ASP.NET 无级限分类个人见解



        最近正在做一套信息发布系统,允许无限级城市,无级限分类,客户自定义字段,显示列表自定义等功能.查阅了相关资料这套系统快要完工了,但发现效率不是很高.之前我习惯把数据一次性读出来装入缓存,然后像无限级的东西,在类中读取缓存关系再读出来,结果发现在无限级数据不是很多的情况下,第一次装入的速度还可以,后来越发越觉得慢,参阅了一些资料,优化方面.

    例如:ASP.NET无限级分类的非递归实现(存储过程版)
    http://hi.baidu.com/webrecord/blog/item/194031081bad8dd062d986f2.html

    这个方法还可以,只不过在存入的时候麻烦,读取了出来还是蛮快的.如果我需要根据自定义排序,在加上一些其它条件估计得写上N多代码.

    以下是我的方法.

    1.存入的时候还是按普通方法存入
    2.创建存储过程,主要是用来读数据的

    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    CREATE PROCEDURE [dbo].[City_GetListInfo] (@pid int)
    AS
    BEGIN
     SET NOCOUNT ON
     DECLARE @level int, @line char(20)
     CREATE TABLE #city (cityid int, level int,[id] [int] IDENTITY(1,1) NOT NULL,)
     CREATE TABLE #c (item int, level int)
     INSERT INTO #c VALUES (@pid, 1)
     SELECT @level = 1

     WHILE @level > 0
     BEGIN
       IF EXISTS (SELECT * FROM #c WHERE level = @level)
      BEGIN
        SELECT @pid = item
        FROM #c
        WHERE level = @level
        INSERT INTO #city VALUES (@pid, @level)
        DELETE FROM #c
        WHERE level = @level
       AND item = @pid
        INSERT #c
       SELECT cityid, @level + 1
       FROM [城市表]
       WHERE citypid = @pid order by citysort asc,cityname asc
        IF @@ROWCOUNT > 0
       SELECT @level = @level + 1
      END
       ELSE
      SELECT @level = @level - 1
     END

     select a.CityId,a.CityName, CASE WHEN a.CityDomain IS NULL THEN '' ELSE a.CityDomain END AS CityDomain,a.CityPId,a.CitySort, CASE WHEN a.CitySys IS NULL THEN 'false' ELSE a.CitySys END AS CitySys,b.level
     from #city b, [城市表] a where a.cityid=b.cityid order by b.id asc

    END
    这个主要是读出的时候自动排好顺序.

    3.创建另一张表,结构和现有表一模一样,我现在用是的城市表,就创建城市优化表
    4.创建存储过程

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO

    CREATE PROCEDURE [dbo].[City_OptimizeUpdate]
     -- Add the parameters for the stored procedure here
    AS
    BEGIN

     truncate   table   [城市优化表]
     INSERT INTO [t_sys_optimize_city]
     EXEC [dbo].[City_GetListInfo]
       @pid = 0
    END


    这个将结果永久存入城市优化表,但是这样还是不能自动更新,需要借助触发器


    5给[城市表]增加触发器

    CREATE TRIGGER [dbo].[Trigger_城市表]
       ON  [dbo].[城市表]
       for update,insert,delete
    AS
    BEGIN

       SET NOCOUNT ON;

        EXEC [dbo].[City_OptimizeUpdate]

    6.以后读取就直接读取[城市优化表]

  • 相关阅读:
    使用OPC的方式去连接PLC进行AB SLC-5_04数据的采集
    pytest:conftest.py运行细节一则
    《数据结构与算法》和《设计模式》之开门见山篇
    C语言真正的编译过程
    外挂原理之植物大战僵尸
    ORACLE数据库创建动态表
    JS中事件绑定问题
    由 “无法使用从远程表选择的 lob 定位符” 错误而引导出来的一系列问题解决方案
    安装JDK,配置环境变量有感
    MSSQL 常见故障处理
  • 原文地址:https://www.cnblogs.com/hubj/p/1241760.html
Copyright © 2020-2023  润新知