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

数据库 SQL Server
本文我们详细地介绍了以C#为前端,来实现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常用命令操作技巧
责任编辑:赵鹏 来源: CSDN博客
相关推荐

2010-09-25 09:12:44

SQL Server

2009-08-05 15:17:02

NTILE函数

2010-11-10 15:23:55

SQL SERVER

2023-11-28 07:48:23

SQL Server数据库

2011-08-22 16:23:47

SQL Server数视图复杂的数据查询

2009-05-26 10:21:07

2010-11-08 17:13:21

SQL Server跨

2010-06-18 10:34:38

SQL Server

2011-08-23 16:23:13

OracleMySQLSQL Server

2011-07-22 13:46:41

SQL Server MDAC

2010-06-17 17:11:03

SQL Server

2010-07-08 15:55:25

SQL Server

2011-03-30 15:36:31

SQL Server

2011-08-23 09:12:17

SQL Server多

2010-11-09 09:43:20

SQL Server查

2010-11-09 15:18:37

SQL Server多

2010-10-21 14:43:46

SQL Server查

2020-11-26 15:51:11

SQL数据库大数据

2009-01-27 21:00:00

服务器数据库SQL Server

2010-07-06 10:19:15

SQL Server层
点赞
收藏

51CTO技术栈公众号