SQL Server 2000层次数据查询的实现方法

以C#为前端,SQL Server 2000层次数据查询是如何实现的呢?本文我们主要就介绍这部分内容,接下来就让我们一起来了解一下这一过程吧。

//层次数据实体

 

  1. public class ComLevelDataEntity  
  2.    {  
  3.        public ComLevelDataEntity()  
  4.        {  
  5.            searchLevel = 0;  
  6.            startWithRoot = true;  
  7.            dataObjectAlias = "t";  
  8.        }  
  9.        private int searchLevel;  
  10.        /// <summary> 
  11.        /// 查询层次  
  12.        /// </summary> 
  13.        public int SearchLevel  
  14.        {  
  15.            get { return searchLevel; }  
  16.            set { searchLevel = value; }  
  17.        }  
  18.  
  19.        private string dataObjectAlias;  
  20.        /// <summary> 
  21.        /// 别名  
  22.        /// </summary> 
  23.        public string DataObjectAlias  
  24.        {  
  25.            get { return dataObjectAlias; }  
  26.            set { dataObjectAlias = value; }  
  27.        }  
  28.        private string protasis;  
  29.        /// <summary> 
  30.        /// 条件从句  
  31.        /// </summary> 
  32.        public string Protasis  
  33.        {  
  34.            get  
  35.            {  
  36.                return string.IsNullOrEmpty(protasis) ? string.Empty : string.Concat(" and ", protasis);  
  37.            }  
  38.            set { protasis = value; }  
  39.        }  
  40.  
  41.        private bool startWithRoot;  
  42.        /// <summary> 
  43.        /// 整树搜索  
  44.        /// </summary> 
  45.        public bool StartWithRoot  
  46.        {  
  47.            get { return startWithRoot; }  
  48.            set { startWithRoot = value; }  
  49.        }  
  50.        private string dataObjectName;  
  51.        /// <summary> 
  52.        /// 数据对象名称  
  53.        /// </summary> 
  54.        public string DataObjectName  
  55.        {  
  56.            get { return dataObjectName; }  
  57.            set { dataObjectName = value; }  
  58.        }  
  59.  
  60.        private int cascadeLevel;  
  61.        /// <summary> 
  62.        /// 层级  
  63.        /// </summary> 
  64.        public int CascadeLevel  
  65.        {  
  66.            get { return cascadeLevel; }  
  67.            set { cascadeLevel = value; }  
  68.        }  
  69.  
  70.        private string displayFieldName;  
  71.        /// <summary> 
  72.        /// 显示字段名称  
  73.        /// </summary> 
  74.        public string DisplayFieldName  
  75.        {  
  76.            get { return displayFieldName; }  
  77.            set { displayFieldName = value; }  
  78.        }  
  79.  
  80.        private string keyFieldName;  
  81.        /// <summary> 
  82.        /// 键值字段名称  
  83.        /// </summary> 
  84.        public string KeyFieldName  
  85.        {  
  86.            get { return keyFieldName; }  
  87.            set { keyFieldName = value; }  
  88.        }  
  89.  
  90.        private string displayFieldValue;  
  91.        /// <summary> 
  92.        /// 显示字段值  
  93.        /// </summary> 
  94.        public string DisplayFieldValue  
  95.        {  
  96.            get { return displayFieldValue; }  
  97.            set { displayFieldValue = value; }  
  98.        }  
  99.  
  100.        private string keyFieldValue;  
  101.        /// <summary> 
  102.        /// 键值字段值  
  103.        /// </summary> 
  104.        public string KeyFieldValue  
  105.        {  
  106.            get { return keyFieldValue; }  
  107.            set { keyFieldValue = value; }  
  108.        }  
  109.  
  110.        private string levelFieldName;  
  111.        /// <summary> 
  112.        /// 层次字段名称  
  113.        /// </summary> 
  114.        public string LevelFieldName  
  115.        {  
  116.            get { return levelFieldName; }  
  117.            set { levelFieldName = value; }  
  118.        }  
  119.  
  120.        private string levelFieldValue;  
  121.        /// <summary> 
  122.        /// 层次字段值  
  123.        /// </summary> 
  124.        public string LevelFieldValue  
  125.        {  
  126.            get { return levelFieldValue; }  
  127.            set { levelFieldValue = value; }  
  128.        }  
  129.    } 

 

//sqlserver2000存储过程

 

  1. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[sp_gettreedata]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)  
  2. drop procedure [dbo].[sp_gettreedata]  
  3. GO  
  4.  
  5. SET QUOTED_IDENTIFIER ON   
  6. GO  
  7.  
  8. SET ANSI_NULLS ON   
  9. GO  
  10.  
  11. CREATE      PROCEDURE [dbo].[sp_gettreedata]  
  12. (@table_name nvarchar(50), @id nvarchar(50), @name nvarchar(50), @parent_id nvarchar(50), @startId  nvarchar(50), @maxlevel int)  
  13. AS  
  14.     declare @v_id nvarchar(50)  
  15.     declare @v_level int  
  16.     declare @sql nvarchar(500)  
  17.     declare @v_maxlevel int  
  18. begin  
  19.     create table #temp (id nvarchar(50),name nvarchar(50),parent_id nvarchar(50))  
  20.     create table #t1 (id nvarchar(50),name nvarchar(50),parent_id nvarchar(50),level int)  
  21.     delete from   com_temp  
  22.     set @sql='insert into #temp select '+@id+','+@name+','+@parent_id +' from '+@table_name  
  23.     exec sp_executesql @sql  
  24.  
  25.     set @v_level=1 
  26.     set @v_id=@startId  
  27.     set @v_maxlevel = @maxlevel  
  28.     insert #t1 select a.id,a.name,a.parent_id,@v_level from #temp a where a.id=@v_id  
  29.     while @@rowcount>0  
  30.     begin  
  31.         set @v_level=@v_level+1  
  32.         insert #t1 select a.id,a.name,a.parent_id,@v_level  
  33.         from #temp a where a.parent_id in  
  34.         (select id from #t1 where level=@v_level-1)  
  35.     end   
  36.     insert into Com_TEMP select a.level,a.id,a.name,a.parent_id,b.name parent_name  
  37.     from  #t1 a  left outer join #temp b  
  38.     on a.parent_id = b.id   
  39.     where a.level <= @maxlevel  
  40.     order by a.level  
  41.  
  42.     select * from Com_TEMP order by dbo.f_getidpath(id)  
  43. end  
  44.  
  45. GO  
  46. SET QUOTED_IDENTIFIER OFF   
  47. GO  
  48. SET ANSI_NULLS ON   
  49. GO 

 

//sqlserver2000函数

  1. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_getidpath]') and xtype in (N'FN', N'IF', N'TF'))  
  2. drop function [dbo].[f_getidpath]  
  3. GO  
  4.  
  5. SET QUOTED_IDENTIFIER OFF   
  6. GO  
  7. SET ANSI_NULLS ON   
  8. GO  
  9.  
  10. CREATE      function   f_getidpath(@id   char(36))   
  11. returns   varchar(8000)   
  12. as   
  13. begin   
  14. declare   @re   varchar(8000),@pid   char(36)   
  15. set   @re=@id  
  16. select   @pid=parent_id   from   com_temp   where   id=@id   
  17. while   @@rowcount> 0   
  18. select   @re=@pid + '.'+ @re,@pid=parent_id   from   com_temp  where   id=@pid   
  19. return(@re)   
  20. end  
  21.  
  22. GO  
  23. SET QUOTED_IDENTIFIER OFF   
  24. GO  
  25. SET ANSI_NULLS ON   
  26. GO 

//数据访问层方法

 

  1. public ComLevelDataEntity[] PrepareHierarchyData(ComLevelDataEntity entity)  
  2.         {  
  3.             System.Data.SqlClient.SqlParameter[] parameters = new System.Data.SqlClient.SqlParameter[6];  
  4.             parameters[0] = new SqlParameter();  
  5.             parameters[0].ParameterName = "@table_name";  
  6.             parameters[0].Size = 50;  
  7.             parameters[0].SqlDbType = System.Data.SqlDbType.VarChar;  
  8.             parameters[1] = new SqlParameter();  
  9.             parameters[1].ParameterName = "@id";  
  10.             parameters[1].Size = 50;  
  11.             parameters[1].SqlDbType = System.Data.SqlDbType.VarChar;  
  12.             parameters[2] = new SqlParameter();  
  13.             parameters[2].ParameterName = "@name";  
  14.             parameters[2].Size = 50;  
  15.             parameters[2].SqlDbType = System.Data.SqlDbType.VarChar;  
  16.             parameters[3] = new SqlParameter();  
  17.             parameters[3].ParameterName = "@parent_id";  
  18.             parameters[3].Size = 50;  
  19.             parameters[3].SqlDbType = System.Data.SqlDbType.VarChar;  
  20.             parameters[4] = new SqlParameter();  
  21.             parameters[4].ParameterName = "@startId";  
  22.             parameters[4].Size = 50;  
  23.             parameters[4].SqlDbType = System.Data.SqlDbType.VarChar;  
  24.             parameters[5] = new SqlParameter();  
  25.             parameters[5].ParameterName = "@maxlevel";  
  26.             parameters[5].SqlDbType = System.Data.SqlDbType.Int;  
  27.             string spName = "sp_gettreedata";  
  28.             if (entity.SearchLevel <= 0)  
  29.             {  
  30.                 parameters[0].Value = entity.DataObjectName;  
  31.                 parameters[1].Value = entity.KeyFieldName;  
  32.                 parameters[2].Value = entity.DisplayFieldName;  
  33.                 parameters[3].Value = entity.LevelFieldName;  
  34.                 parameters[4].Value = entity.KeyFieldValue;  
  35.                 parameters[5].Value = 100;  
  36.             }  
  37.             else  
  38.             {  
  39.                 parameters[0].Value = entity.DataObjectName;  
  40.                 parameters[1].Value = entity.KeyFieldName;  
  41.                 parameters[2].Value = entity.DisplayFieldName;  
  42.                 parameters[3].Value = entity.LevelFieldName;  
  43.                 parameters[4].Value = entity.KeyFieldValue;  
  44.                 parameters[5].Value = entity.SearchLevel;  
  45.             }  
  46.             List<ComLevelDataEntity> results = new List<ComLevelDataEntity>();  
  47.             IDbConnection connection = IDALProvider.IDAL.PopConnection();  
  48.             IDataReader sqlReader = IDALProvider.IDAL.ExecuteReader(connection,spName, parameters);  
  49.             while (sqlReader.Read())  
  50.             {  
  51.                 ComLevelDataEntity result = new ComLevelDataEntity();  
  52.                 if (!sqlReader.IsDBNull(0))  
  53.                     result.CascadeLevel = (int)sqlReader.GetInt32(0);  
  54.                 if (!sqlReader.IsDBNull(1))  
  55.                     result.KeyFieldValue = sqlReader.GetString(1);  
  56.                 if (!sqlReader.IsDBNull(2))  
  57.                     result.DisplayFieldValue = sqlReader.GetString(2);  
  58.                 if (!sqlReader.IsDBNull(3))  
  59.                     result.LevelFieldValue = sqlReader.GetString(3);  
  60.                 result.DataObjectName = entity.DataObjectName;  
  61.                 result.DisplayFieldName = entity.DisplayFieldName;  
  62.                 result.LevelFieldName = entity.LevelFieldName;  
  63.                 result.KeyFieldName = entity.KeyFieldName;  
  64.                 results.Add(result);  
  65.             }  
  66.             sqlReader.Close();  
  67.             IDALProvider.IDAL.PushConnection(connection);  
  68.             return results.ToArray();  
  69.         } 

 

//前端调用代码

 

  1. ComLevelDataEntity entity = new ComLevelDataEntity();  
  2. entity.DataObjectName = "COM_DEPART";  
  3. entity.DataObjectAlias = "t";  
  4. entity.StartWithRoot = true;  
  5. entity.KeyFieldName = "id";  
  6. entity.LevelFieldName = "parent_id";  
  7. entity.DisplayFieldName = "name";  
  8. entity.KeyFieldValue = SystemLogic.CurrentUser.DATA_ORGANISE_ID;  
  9. ComLevelDataEntity[] results = IDALProvider.IDAL.PrepareHierarchyData(entity);  
  10. this.tvTree.DataSource = results;  
  11. this.tvTree.DataBind(); 

 

关于以C#为前端,SQL Server 2000层次数据查询的实现方法就介绍到这里了,希望本次的介绍能够对您有所收获!

【编辑推荐】

  1. 适合初学者的MySQL学习笔记之管理员常用操作总结
  2. 适合初学者的MySQL学习笔记之SELECT语句使用详解
  3. MySQL数据库存储引擎之MyISAM和InnoDB的区别对比
  4. 适合初学者的MySQL学习笔记之ORDER BY子句使用详解
  5. 适合初学者的MySQL学习笔记之MySQL常用命令操作技巧

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/303086.html<

(0)
运维的头像运维
上一篇2025-05-25 02:32
下一篇 2025-05-25 02:33

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注