SqlSiteMapProviderusing System;
SqlSiteMapProvider
using System.Collections.Generic;
SqlSiteMapProvider
using System.Collections.Specialized;
SqlSiteMapProvider
using System.Text;
SqlSiteMapProvider
using System.Web;
SqlSiteMapProvider
using System.Data;
SqlSiteMapProvider
using System.Web.Caching;
SqlSiteMapProvider
using System.Data.SqlClient;
SqlSiteMapProvider
using System.Configuration.Provider;
SqlSiteMapProvider
using System.Data.Common;
SqlSiteMapProvider
using System.Configuration;
SqlSiteMapProvider
using System.Web.Security;
SqlSiteMapProvider
using System.Web.Configuration;
SqlSiteMapProvider
using System.Security.Permissions;
SqlSiteMapProvider
namespace FStudio.Provider

 

 

 

SqlSiteMapProvider以下是数据库脚本(MSSQL2000)
SqlSiteMapProvider
SqlSiteMapProvider
SqlSiteMapProvider
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SqlSiteMap_Add]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
SqlSiteMapProvider
drop procedure [dbo].[SqlSiteMap_Add]
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SqlSiteMap_Del]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
SqlSiteMapProvider
drop procedure [dbo].[SqlSiteMap_Del]
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SqlSiteMap_Move]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
SqlSiteMapProvider
drop procedure [dbo].[SqlSiteMap_Move]
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SqlSiteMap_Query]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
SqlSiteMapProvider
drop procedure [dbo].[SqlSiteMap_Query]
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SqlSiteMap_QueryChildren]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
SqlSiteMapProvider
drop procedure [dbo].[SqlSiteMap_QueryChildren]
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SqlSiteMap_QueryParent]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
SqlSiteMapProvider
drop procedure [dbo].[SqlSiteMap_QueryParent]
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SqlSiteMap_QueryRoot]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
SqlSiteMapProvider
drop procedure [dbo].[SqlSiteMap_QueryRoot]
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SqlSiteMap_Reset]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
SqlSiteMapProvider
drop procedure [dbo].[SqlSiteMap_Reset]
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SqlSiteMap_ResetDataNum]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
SqlSiteMapProvider
drop procedure [dbo].[SqlSiteMap_ResetDataNum]
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SqlSiteMap_Select]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
SqlSiteMapProvider
drop procedure [dbo].[SqlSiteMap_Select]
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SqlSiteMap_SelectClassName]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
SqlSiteMapProvider
drop procedure [dbo].[SqlSiteMap_SelectClassName]
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SqlSiteMap_Update]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
SqlSiteMapProvider
drop procedure [dbo].[SqlSiteMap_Update]
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SqlSiteMap_UpdateDataNum]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
SqlSiteMapProvider
drop procedure [dbo].[SqlSiteMap_UpdateDataNum]
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SqlSiteMap_UpdateDataNumList]'and OBJECTPROPERTY(id, N'IsProcedure'= 1)
SqlSiteMapProvider
drop procedure [dbo].[SqlSiteMap_UpdateDataNumList]
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[SqlSiteMap]'and OBJECTPROPERTY(id, N'IsUserTable'= 1)
SqlSiteMapProvider
drop table [dbo].[SqlSiteMap]
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
CREATE TABLE [dbo].[SqlSiteMap] (
SqlSiteMapProvider 
[ClassID] [int] NOT NULL ,
SqlSiteMapProvider 
[ClassName] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
SqlSiteMapProvider 
[Code] [nvarchar] (200) COLLATE Chinese_PRC_CI_AS NOT NULL ,
SqlSiteMapProvider 
[DataNum] [int] NULL ,
SqlSiteMapProvider 
[Url] [nvarchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
SqlSiteMapProvider 
[Roles] [nvarchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
SqlSiteMapProvider 
[Target] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
SqlSiteMapProvider 
[Info] [nvarchar] (1000) COLLATE Chinese_PRC_CI_AS NULL 
SqlSiteMapProvider
ON [PRIMARY]
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
ALTER TABLE [dbo].[SqlSiteMap] ADD 
SqlSiteMapProvider 
CONSTRAINT [DF_SqlSiteMap_DataNum] DEFAULT (0FOR [DataNum],
SqlSiteMapProvider 
CONSTRAINT [PK_SqlSiteMap] PRIMARY KEY  CLUSTERED 
SqlSiteMapProvider (
SqlSiteMapProvider  
[ClassID]
SqlSiteMapProvider )  
ON [PRIMARY] 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
SET QUOTED_IDENTIFIER ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
----添加分类存储过程
SqlSiteMapProvider
Create        Proc SqlSiteMap_Add
SqlSiteMapProvider
@ClassName nvarchar(50),
SqlSiteMapProvider
@DataNum int ,
SqlSiteMapProvider
@Url nvarchar(200),@Roles nvarchar(200),@Target nvarchar(50),
SqlSiteMapProvider
@Info nvarchar(1000),
SqlSiteMapProvider
@ParentID int -- 0表示根类别
SqlSiteMapProvider
As
SqlSiteMapProvider
Declare @EditCode int
SqlSiteMapProvider
Declare @StepLen int
SqlSiteMapProvider
Declare @matchStr nvarchar(50)
SqlSiteMapProvider
Declare @typeCode nvarchar(50)
SqlSiteMapProvider
Declare @Code nvarchar(200)
SqlSiteMapProvider
Declare @MyCode nvarchar(200)
SqlSiteMapProvider
Declare @ParentCode nvarchar(200
SqlSiteMapProvider
Declare @selfCode int
SqlSiteMapProvider
Set @editCode=1
SqlSiteMapProvider
Set @StepLen=4
SqlSiteMapProvider
Set @matchStr=REPLICATE('_',@StepLen--4个_
SqlSiteMapProvider
set @typeCode=''
SqlSiteMapProvider
Set @Code=''
SqlSiteMapProvider
Set @MyCode=''
SqlSiteMapProvider
Set @selfCode=0
SqlSiteMapProvider
Set @ParentCode=''
SqlSiteMapProvider
SqlSiteMapProvider
Select @ParentCode=Code From [SqlSiteMap] Where ClassID=@ParentID
SqlSiteMapProvider
--//*
SqlSiteMapProvider--
判断当前分类编号是否有对应数据,当不允许在父类下添加数据时做下面的检测 
SqlSiteMapProvider--
If Len(@ParentCode)>=@StepLen
SqlSiteMapProvider
  --Begin
SqlSiteMapProvider
    --If (Select Count(ArticleID) From [Article] Where ClassID=(Select ClassID From [ArticleClass] Where Code=@ParentCode) ) >0 
SqlSiteMapProvider
       --Begin
SqlSiteMapProvider
         --RaisError ('父类下有数据,请将其数据转移后再添加',16,1)
SqlSiteMapProvider
         --return 
SqlSiteMapProvider
       --End
SqlSiteMapProvider
  --End
SqlSiteMapProvider--
*//
SqlSiteMapProvider

SqlSiteMapProvider 
SqlSiteMapProvider
SqlSiteMapProvider
If(@editCode=1)
SqlSiteMapProvider    
Begin
SqlSiteMapProvider        
--获取子类中编号最大的Code,column.ParentCode + matchStr中
SqlSiteMapProvider
 Select Top 1 @MyCode= Code From [SqlSiteMap] Where Code Like @ParentCode + @matchStr Order By Code DESC
SqlSiteMapProvider 
If @@ROWCOUNT >0
SqlSiteMapProvider     
Begin
SqlSiteMapProvider  
Set @selfCode=Cast(Right(@MyCode,@StepLenAs Int ) +1
SqlSiteMapProvider  
Set @typeCode=Replicate('0',@StepLen-1+ Cast(@selfCode As nvarchar)
SqlSiteMapProvider                
Set @typeCode=Right(@typeCode,@StepLen)
SqlSiteMapProvider                
Set @typeCode=@ParentCode + @TypeCode
SqlSiteMapProvider     
End
SqlSiteMapProvider 
Else
SqlSiteMapProvider     
Begin
SqlSiteMapProvider  
Set @typeCode=@ParentCode +Replicate('0',@StepLen-1)+'1'
SqlSiteMapProvider     
End
SqlSiteMapProvider    
End
SqlSiteMapProvider
Declare @ClassID int
SqlSiteMapProvider
Set @ClassID=0
SqlSiteMapProvider      
--获取最大ClassID
SqlSiteMapProvider
      Select @ClassId=Max(ClassID) From [SqlSiteMap]
SqlSiteMapProvider      
If Not @ClassID Is Null
SqlSiteMapProvider         
Begin
SqlSiteMapProvider           
Set @ClassId=@ClassID +1
SqlSiteMapProvider         
End
SqlSiteMapProvider      
Else
SqlSiteMapProvider         
Begin
SqlSiteMapProvider           
Set @ClassID=1
SqlSiteMapProvider         
End 
SqlSiteMapProvider
SqlSiteMapProvider 
SqlSiteMapProvider      
Insert into [SqlSiteMap]
SqlSiteMapProvider            (ClassID,ClassName,Code,DataNum,
[Url],[Roles],[Target], Info)
SqlSiteMapProvider      
values
SqlSiteMapProvider            (
@ClassID,@ClassName,@typeCode,@DataNum,@Url,@Roles,@Target@Info)
SqlSiteMapProvider            
SqlSiteMapProvider      
Select @ClassID As ClassID      
SqlSiteMapProvider
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET QUOTED_IDENTIFIER OFF 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
SET QUOTED_IDENTIFIER ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
----删除一个分类,只允许删除没有字类的分类
SqlSiteMapProvider
Create    Proc SqlSiteMap_Del
SqlSiteMapProvider
@ClassID int 
SqlSiteMapProvider
As
SqlSiteMapProvider
If (Select Count(ClassID) From[SqlSiteMap] Where Code Like(Select Code From [SqlSiteMap] Where ClassID=@ClassID)+'%' And ClassId <> @ClassId ) >0
SqlSiteMapProvider    
Begin
SqlSiteMapProvider      
RaisError ('不能删除带有子类的分类',16,1)
SqlSiteMapProvider      
Return
SqlSiteMapProvider    
End
SqlSiteMapProvider
----当前分类下面是否有数据,因为前面判断了分类是最终叶分类,故这里直接用ClassID=@ClassID
SqlSiteMapProvider--
If (Select Count(ArticleID) From [Article] Where ClassId=@ClassID) >0
SqlSiteMapProvider
   --Begin
SqlSiteMapProvider
     --RaisError ('所删除的类别下有文章',16,1)
SqlSiteMapProvider
     --Return 
SqlSiteMapProvider
   --End
SqlSiteMapProvider
Declare @Code nvarchar(200)
SqlSiteMapProvider
Declare @Value int
SqlSiteMapProvider
Set @Value=0
SqlSiteMapProvider
Select @Code=[Code],@Value=[DataNum] From [SqlSiteMap] Where [ClassID]=@ClassID
SqlSiteMapProvider
Update [SqlSiteMap] Set [DataNum]=[DataNum] - @Value Where [ClassID] InSelect ClassID From [SqlSiteMap] Where Len(Code)<=Len(@CodeAnd Code=Left(@Code,Len(Code)))
SqlSiteMapProvider
Delete From SqlSiteMap  Where ClassID=@ClassID  
SqlSiteMapProvider
SqlSiteMapProvider
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET QUOTED_IDENTIFIER OFF 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
SET QUOTED_IDENTIFIER ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
---移动分类的排序
SqlSiteMapProvider
Create     Proc SqlSiteMap_Move
SqlSiteMapProvider
@ClassID int,
SqlSiteMapProvider
@IsUp bit=1
SqlSiteMapProvider
As
SqlSiteMapProvider
Declare @maskStr nvarchar(200)
SqlSiteMapProvider
Declare @tempStr nvarchar(200)
SqlSiteMapProvider
Declare @Code nvarchar(200)
SqlSiteMapProvider
Set @Code=''
SqlSiteMapProvider
Set @tempStr=''
SqlSiteMapProvider
Select @Code=Code From [SqlSiteMap] Where ClassID=@ClassID
SqlSiteMapProvider
Set @maskStr=REPLICATE(N'-',Len(@Code))
SqlSiteMapProvider
If  @Code !='' And ( (Len(@Code% 4=0 )
SqlSiteMapProvider   
Begin
SqlSiteMapProvider     
If(@isUp=1)
SqlSiteMapProvider       
Begin
SqlSiteMapProvider         
If(Len(@Code> 4)
SqlSiteMapProvider           
Begin
SqlSiteMapProvider             
Select Top 1 @tempStr=Code From [SqlSiteMap] Where Len(Code)=Len(@CodeAnd Code < @Code And Left(Code,Len(Code)-4)=Left(@Code,Len(@Code)-4Order By Code DESC
SqlSiteMapProvider           
End
SqlSiteMapProvider         
Else
SqlSiteMapProvider           
Begin
SqlSiteMapProvider             
Select Top 1  @tempStr=Code From [SqlSiteMap] Where Len(Code)=Len(@CodeAnd Code < @Code  Order By Code DESC
SqlSiteMapProvider           
End
SqlSiteMapProvider       
End
SqlSiteMapProvider     
Else
SqlSiteMapProvider       
Begin
SqlSiteMapProvider         
If(Len(@Code>4)
SqlSiteMapProvider           
Begin
SqlSiteMapProvider      
Select Top 1 @tempStr=Code From [SqlSiteMap] Where Len(Code)=Len(@CodeAnd Code > @Code  And Left(Code,Len(Code)-4)=Left(@Code,Len(@Code)-4Order By Code ASC
SqlSiteMapProvider           
End
SqlSiteMapProvider         
Else
SqlSiteMapProvider           
Begin
SqlSiteMapProvider      
Select Top 1 @tempStr=Code From [SqlSiteMap] Where Len(Code)=Len(@CodeAnd Code >@Code Order By Code ASC
SqlSiteMapProvider           
End 
SqlSiteMapProvider       
End
SqlSiteMapProvider   
End
SqlSiteMapProvider
-- //已经是最前(最后)
SqlSiteMapProvider
If @tempStr Is Null Or RTrim(LTrim(@tempStr))=''
SqlSiteMapProvider
Begin
SqlSiteMapProvider 
return 
SqlSiteMapProvider
End
SqlSiteMapProvider
SqlSiteMapProvider
Declare @CodeLen int
SqlSiteMapProvider
Declare @MAXLEN int
SqlSiteMapProvider
Set @CodeLen=Len(@Code)
SqlSiteMapProvider
Set @MAXLEN=200
SqlSiteMapProvider
--//设置目标类,以及目标类的子类为----0001(目标类)或----00010002(子类)为形式
SqlSiteMapProvider
Update [SqlSiteMap] Set Code=@maskStr +Substring(code,@CodeLen +1,@MAXLENWhere Left(code,@CodeLen)=@tempStr
SqlSiteMapProvider
--//更新当前交换类(包括子类)Code为目标类Code
SqlSiteMapProvider
Update [SqlSiteMap] Set Code=@tempStr +Substring(Code,@CodeLen+1,@MAXLENWhere Left(code,@CodeLen)=@Code
SqlSiteMapProvider
--//更新目标类(包括子类)Code为当前交换类Code
SqlSiteMapProvider
Update [SqlSiteMap] Set Code=@Code +Substring(code,@CodeLen +1,@MAXLENWhere Left(code,@CodeLen)=@maskStr
SqlSiteMapProvider
SqlSiteMapProvider
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET QUOTED_IDENTIFIER OFF 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
SET QUOTED_IDENTIFIER ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
SqlSiteMapProvider
----获取整个分类信息
SqlSiteMapProvider
CREATE  Proc SqlSiteMap_Query
SqlSiteMapProvider
As
SqlSiteMapProvider
Select [ClassID],[ClassName],[Code],[Url],[Roles],[Target][DataNum],[Info] From [SqlSiteMap] Order By [Code]
SqlSiteMapProvider
SqlSiteMapProvider
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET QUOTED_IDENTIFIER OFF 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
SET QUOTED_IDENTIFIER ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
----获取指定类的子类,并包括自身
SqlSiteMapProvider
Create Proc SqlSiteMap_QueryChildren
SqlSiteMapProvider
@ClassID int
SqlSiteMapProvider
As
SqlSiteMapProvider
Declare @Code nvarchar(200)
SqlSiteMapProvider
Select @Code=[Code] From [SqlSiteMap] Where [ClassID]=@ClassID
SqlSiteMapProvider
Select [ClassID],[ClassName],[Code],[Url],[Roles],[Target][DataNum]
SqlSiteMapProvider  
From [SqlSiteMap] Where Code Like @Code +'%' Order By Code      
SqlSiteMapProvider  
SqlSiteMapProvider
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET QUOTED_IDENTIFIER OFF 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
SET QUOTED_IDENTIFIER ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
-----获取指定分类的父分类信息
SqlSiteMapProvider
Create   Proc SqlSiteMap_QueryParent
SqlSiteMapProvider
@ClassID int
SqlSiteMapProvider
As
SqlSiteMapProvider
Declare @ClassCode nvarchar(200)
SqlSiteMapProvider
Select @ClassCode=Code From [SqlSiteMap] Where ClassId=@ClassID
SqlSiteMapProvider
Select ClassID,ClassName,Code,[Url],[Roles],[Target], DataNum
SqlSiteMapProvider       
From [SqlSiteMap]
SqlSiteMapProvider       
Where  Len(Code)<=Len(@ClassCode)
SqlSiteMapProvider       
And Code = Left(@ClassCode,Len(Code))
SqlSiteMapProvider       
Order By Code 
SqlSiteMapProvider       
SqlSiteMapProvider       
SqlSiteMapProvider
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET QUOTED_IDENTIFIER OFF 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
SET QUOTED_IDENTIFIER ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
-----获取顶级分类列表
SqlSiteMapProvider
Create  Proc SqlSiteMap_QueryRoot
SqlSiteMapProvider
AS
SqlSiteMapProvider
Select [ClassID],[ClassName],[Code],[Url],[Roles],[Target][DataNum] From [SqlSiteMap] Where Len(Code)=4 Order By Code   
SqlSiteMapProvider
SqlSiteMapProvider
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET QUOTED_IDENTIFIER OFF 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
SET QUOTED_IDENTIFIER ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
-------重置所有分类为根分类
SqlSiteMapProvider
Create       Proc SqlSiteMap_Reset
SqlSiteMapProvider
As
SqlSiteMapProvider
Declare @code nvarchar(200)
SqlSiteMapProvider
Declare @i int
SqlSiteMapProvider
Set @Code=''
SqlSiteMapProvider
Set @i=1
SqlSiteMapProvider
----修改DataNum列
SqlSiteMapProvider
Declare @Total int
SqlSiteMapProvider
Declare SqlSiteMap_Cursor_Order Cursor For
SqlSiteMapProvider
Select Code From [SqlSiteMap] Order By Code
SqlSiteMapProvider
SqlSiteMapProvider
Open SqlSiteMap_Cursor_Order
SqlSiteMapProvider
Fetch Next From SqlSiteMap_Cursor_Order
SqlSiteMapProvider
Into @Code
SqlSiteMapProvider
WHile @@FETCH_STATUS=0
SqlSiteMapProvider
Begin
SqlSiteMapProvider 
Select @Total= Sum(DataNum) From [SqlSiteMap] Where Code Like @Code + Replicate('_',4
SqlSiteMapProvider 
If Not@Total Is Null)
SqlSiteMapProvider   
Begin
SqlSiteMapProvider    
Update [SqlSiteMap] Set DataNum=DataNum - @Total  WHERE Current Of SqlSiteMap_Cursor_Order
SqlSiteMapProvider   
End
SqlSiteMapProvider 
Set @Total=0
SqlSiteMapProvider 
Fetch Next From SqlSiteMap_Cursor_Order Into @Code
SqlSiteMapProvider
End
SqlSiteMapProvider
Close SqlSiteMap_Cursor_Order
SqlSiteMapProvider
DEALLOCATE SqlSiteMap_Cursor_Order
SqlSiteMapProvider
SqlSiteMapProvider
Declare SqlSiteMap_Cursor CURSOR For
SqlSiteMapProvider
Select CODE From [SqlSiteMap]
SqlSiteMapProvider
SqlSiteMapProvider
Open SqlSiteMap_Cursor
SqlSiteMapProvider
Fetch  Next From SqlSiteMap_Cursor
SqlSiteMapProvider
WHILE @@FETCH_STATUS=0
SqlSiteMapProvider
Begin
SqlSiteMapProvider 
Set @Code=Replicate(N'0',4+  Cast(@i as nvarchar)
SqlSiteMapProvider 
Set @Code=Right(@Code,4)
SqlSiteMapProvider 
Update [SqlSiteMap]  Set Code= @Code  WHERE Current Of SqlSiteMap_Cursor
SqlSiteMapProvider 
Set @i=@i+1
SqlSiteMapProvider 
Fetch Next From SqlSiteMap_Cursor
SqlSiteMapProvider
End
SqlSiteMapProvider
Close SqlSiteMap_Cursor
SqlSiteMapProvider
DEALLOCATE SqlSiteMap_Cursor
SqlSiteMapProvider
SqlSiteMapProvider
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET QUOTED_IDENTIFIER OFF 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
SET QUOTED_IDENTIFIER ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
SqlSiteMapProvider
Create Proc SqlSiteMap_ResetDataNum
SqlSiteMapProvider
@ClassID int
SqlSiteMapProvider
As
SqlSiteMapProvider
Declare @Code nvarchar(200)
SqlSiteMapProvider
Declare @Value int
SqlSiteMapProvider
Set @Value=1
SqlSiteMapProvider
Select @Code=[Code],@Value=[DataNum] From [SqlSiteMap] Where ClassID=@ClassID
SqlSiteMapProvider
Update [SqlSiteMap] Set [DataNum]=[DataNum] - @Value Where [ClassID] InSelect ClassID From [SqlSiteMap] Where Len(Code)<=Len(@CodeAnd Code=Left(@Code,Len(Code)))
SqlSiteMapProvider
Update [SqlSiteMap] Set [DataNum]=0 Where [Code] Like @Code + '%'
SqlSiteMapProvider
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET QUOTED_IDENTIFIER OFF 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
SET QUOTED_IDENTIFIER ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
----选择存储过程
SqlSiteMapProvider
Create  PROCEDURE SqlSiteMap_Select
SqlSiteMapProvider 
@ClassID int
SqlSiteMapProvider
AS
SqlSiteMapProvider
SELECT [ClassID],[ClassName],[Code],[DataNum],[Url],[Roles],[Target][Info]
SqlSiteMapProvider
SqlSiteMapProvider
FROM [SqlSiteMap] 
SqlSiteMapProvider
WHERE 
SqlSiteMapProvider 
[ClassID]=@ClassID
SqlSiteMapProvider
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET QUOTED_IDENTIFIER OFF 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
SET QUOTED_IDENTIFIER ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
----获取指定分类的分类名称
SqlSiteMapProvider
Create  Proc SqlSiteMap_SelectClassName
SqlSiteMapProvider
@ClassID int
SqlSiteMapProvider
AS
SqlSiteMapProvider
Select [ClassName] From [SqlSiteMap] Where [ClassID]=@ClassID
SqlSiteMapProvider
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET QUOTED_IDENTIFIER OFF 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
SET QUOTED_IDENTIFIER ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
----修改分类存储过程
SqlSiteMapProvider
Create        Proc SqlSiteMap_Update
SqlSiteMapProvider
@ClassID int , --需要修改的ClassID
SqlSiteMapProvider
@ClassName nvarchar(50),
SqlSiteMapProvider
@Url nvarchar(200),@Roles nvarchar(200),@Target nvarchar(50),
SqlSiteMapProvider
@Info nvarchar(1000),
SqlSiteMapProvider
@ParentID int 
SqlSiteMapProvider
As
SqlSiteMapProvider
Declare @EditCode int
SqlSiteMapProvider
Declare @StepLen int
SqlSiteMapProvider
Declare @matchStr nvarchar(50)
SqlSiteMapProvider
Declare @typeCode nvarchar(50)
SqlSiteMapProvider
Declare @Code nvarchar(200)
SqlSiteMapProvider
Declare @MyCode nvarchar(200)
SqlSiteMapProvider
Declare @ParentCode nvarchar(200)
SqlSiteMapProvider
Declare @selfCode int
SqlSiteMapProvider
Set @editCode=0
SqlSiteMapProvider
Set @StepLen=4
SqlSiteMapProvider
Set @matchStr=REPLICATE('_',@StepLen--4个_
SqlSiteMapProvider
set @typeCode=''
SqlSiteMapProvider
Set @Code=''
SqlSiteMapProvider
Set @MyCode=''
SqlSiteMapProvider
Set @selfCode=0
SqlSiteMapProvider
Set @ParentCode=''
SqlSiteMapProvider
SqlSiteMapProvider
SqlSiteMapProvider
Select @ParentCode=Code From [SqlSiteMap] Where ClassID=@ParentID
SqlSiteMapProvider
Select @Code=Code From [SqlSiteMap] Where ClassID=@ClassID
SqlSiteMapProvider
--//*
SqlSiteMapProvider--
判断当前分类编号是否有对应数据,当不允许在父类下添加数据时做下面的检测 
SqlSiteMapProvider--
If Len(@ParentCode)>=@StepLen
SqlSiteMapProvider
  --Begin
SqlSiteMapProvider
    --If (Select Count(ArticleID) From [Article] Where ClassID=(Select ClassID From [ArticleClass] Where Code=@ParentCode) ) >0 
SqlSiteMapProvider
       --Begin
SqlSiteMapProvider
         --RaisError ('父类下有数据,请将其数据转移后再添加',16,1)
SqlSiteMapProvider
         --return 
SqlSiteMapProvider
       --End
SqlSiteMapProvider
  --End
SqlSiteMapProvider--
*//
SqlSiteMapProvider

SqlSiteMapProvider
--修改原有类别
SqlSiteMapProvider--
确定是否要修改Code字段
SqlSiteMapProvider--
查看是否改变了直接父类别(上一级)
SqlSiteMapProvider
If @ParentCode != Left(@code,len(@code)-@StepLen)
SqlSiteMapProvider 
Begin
SqlSiteMapProvider 
--过滤选择自己做为父类
SqlSiteMapProvider
 If(@ParentCode !=@Code)
SqlSiteMapProvider   
Begin
SqlSiteMapProvider     
--过滤选择自己的子类为父类 
SqlSiteMapProvider
     If Len(@ParentCode> Len(@Code)
SqlSiteMapProvider  
Begin
SqlSiteMapProvider     
--因为 Len(@ParentCode) > Len(@Code) 所以可以Left(@ParentCode,Len(@Code))
SqlSiteMapProvider
     If Left(@ParentCode,Len(@Code)) != @Code --如果相等则为选择自己的子类为父类 
SqlSiteMapProvider
   Begin
SqlSiteMapProvider      
Set @EditCode=1
SqlSiteMapProvider   
End
SqlSiteMapProvider  
End
SqlSiteMapProvider     
Else
SqlSiteMapProvider  
Begin
SqlSiteMapProvider      
Set @EditCode=1
SqlSiteMapProvider  
End 
SqlSiteMapProvider   
End
SqlSiteMapProvider 
SqlSiteMapProvider 
End  
SqlSiteMapProvider
SqlSiteMapProvider
SqlSiteMapProvider
If(@editCode=1)
SqlSiteMapProvider    
Begin
SqlSiteMapProvider        
--获取子类中编号最大的Code,column.ParentCode + matchStr中
SqlSiteMapProvider
 Select Top 1 @MyCode= Code From [SqlSiteMap] Where Code Like @ParentCode + @matchStr Order By Code DESC
SqlSiteMapProvider 
--是否有子类
SqlSiteMapProvider
 If @@ROWCOUNT >0
SqlSiteMapProvider     
Begin
SqlSiteMapProvider  
Set @selfCode=Cast(Right(@MyCode,@StepLenAs Int ) +1
SqlSiteMapProvider  
Set @typeCode=Replicate('0',@StepLen-1+ Cast(@selfCode As nvarchar)
SqlSiteMapProvider                
Set @typeCode=Right(@typeCode,@StepLen)
SqlSiteMapProvider                
Set @typeCode=@ParentCode + @TypeCode
SqlSiteMapProvider     
End
SqlSiteMapProvider 
Else --没有子类那么编号从1开始
SqlSiteMapProvider
     Begin
SqlSiteMapProvider  
Set @typeCode=@ParentCode +Replicate('0',@StepLen-1)+'1'
SqlSiteMapProvider     
End
SqlSiteMapProvider    
End
SqlSiteMapProvider
SqlSiteMapProvider
If (@editCode=1)
SqlSiteMapProvider 
Begin
SqlSiteMapProvider   
Update [SqlSiteMap] Set
SqlSiteMapProvider    ClassName
=@ClassName,Code=@typeCode,[Url]=@Url,[Roles]=@Roles,[Target]=@Target, Info=@Info
SqlSiteMapProvider   
where ClassID=@ClassID
SqlSiteMapProvider 
End
SqlSiteMapProvider
Else
SqlSiteMapProvider 
Begin
SqlSiteMapProvider   
Update [SqlSiteMap] Set
SqlSiteMapProvider     ClassName
=@ClassName,[Url]=@Url,[Roles]=@Roles,[Target]=@Target, Info=@Info
SqlSiteMapProvider   
where ClassID=@ClassID     
SqlSiteMapProvider 
End
SqlSiteMapProvider
---修改子类编号(Code)
SqlSiteMapProvider
If(@editCode=1)
SqlSiteMapProvider   
Begin
SqlSiteMapProvider      
Update [SqlSiteMap] Set
SqlSiteMapProvider       Code
=@typeCode + Right(Code,Len(Code)-Len(@Code))
SqlSiteMapProvider      
Where Code Like @Code + '%'  
SqlSiteMapProvider   
End
SqlSiteMapProvider
----修改DataNum列
SqlSiteMapProvider
Declare @Value int
SqlSiteMapProvider
Set @Value=0
SqlSiteMapProvider
If(@editCode=1)
SqlSiteMapProvider  
Begin
SqlSiteMapProvider     
Select @Value=[DataNum] From [SqlSiteMap] Where ClassID =@ClassID
SqlSiteMapProvider     
--原有的父类递归减少指定数目
SqlSiteMapProvider
     Update [SqlSiteMap] Set [DataNum]=[DataNum] - @Value Where [ClassID] InSelect ClassID From [SqlSiteMap] Where Len(Code)<Len(@CodeAnd Code=Left(@Code,Len(Code)))
SqlSiteMapProvider     
--现在的父类递归增加指定数目
SqlSiteMapProvider
     Update [SqlSiteMap] Set [DataNum]=[DataNum] + @Value Where [ClassID] InSelect ClassID From [SqlSiteMap] Where Len(Code)<Len(@TypeCodeAnd Code=Left(@TypeCode,Len(Code)))
SqlSiteMapProvider  
End 
SqlSiteMapProvider
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET QUOTED_IDENTIFIER OFF 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
SET QUOTED_IDENTIFIER ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
-------更新DataNum列
SqlSiteMapProvider
Create Proc SqlSiteMap_UpdateDataNum
SqlSiteMapProvider
@ClassID int,
SqlSiteMapProvider
@IsIncrease bit=1--增加或减少
SqlSiteMapProvider
@Value int =1
SqlSiteMapProvider
As
SqlSiteMapProvider
Declare @Code nvarchar(200)
SqlSiteMapProvider
Select @Code=[Code] From [SqlSiteMap] Where [ClassID]=@ClassID
SqlSiteMapProvider
SqlSiteMapProvider
If @IsIncrease=1
SqlSiteMapProvider   
Begin  
SqlSiteMapProvider     
Update [SqlSiteMap] Set [DataNum]=[DataNum] + @Value Where [ClassID] InSelect ClassID From [SqlSiteMap] Where Len(Code)<=Len(@CodeAnd Code=Left(@Code,Len(Code)))
SqlSiteMapProvider   
End
SqlSiteMapProvider
Else
SqlSiteMapProvider   
Begin
SqlSiteMapProvider     
Update [SqlSiteMap] Set [DataNum]=[DataNum] - @Value Where [ClassID] InSelect ClassID From [SqlSiteMap] Where Len(Code)<=Len(@CodeAnd Code=Left(@Code,Len(Code)))
SqlSiteMapProvider   
End
SqlSiteMapProvider   
SqlSiteMapProvider
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET QUOTED_IDENTIFIER OFF 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
SET QUOTED_IDENTIFIER ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
----批量更新列的DataNum值,@IDs输入的形式为: '1,2,234,2345,22'
SqlSiteMapProvider
Create Proc SqlSiteMap_UpdateDataNumList
SqlSiteMapProvider
@IDs nvarchar(2000),
SqlSiteMapProvider
@IsIncrease bit=1--增加或减少
SqlSiteMapProvider
@Value int=1
SqlSiteMapProvider
As
SqlSiteMapProvider
If @IDs='' 
SqlSiteMapProvider
Begin
SqlSiteMapProvider   
return 
SqlSiteMapProvider
End
SqlSiteMapProvider
Declare @ClassID int
SqlSiteMapProvider
Declare @Code nvarchar(200)
SqlSiteMapProvider
Declare @s int
SqlSiteMapProvider
Declare @Len int
SqlSiteMapProvider
Declare @DataLen int
SqlSiteMapProvider
Set @Len=0
SqlSiteMapProvider
Set @s=1
SqlSiteMapProvider
Set @IDs=','+@IDs+',' --变成 ',1,334,23,'这样的形式
SqlSiteMapProvider
Set @DataLen=Len(@IDs)
SqlSiteMapProvider
While  @s<@DataLen
SqlSiteMapProvider   
Begin
SqlSiteMapProvider 
Set @s=@s+1 
SqlSiteMapProvider 
Set @Len=CharIndex(',',@IDs,@s)-@s
SqlSiteMapProvider 
Set @ClassID=Cast(Substring(@IDs,@s,@Lenas int)
SqlSiteMapProvider        
---更新操作
SqlSiteMapProvider
 Select @Code=[Code] From [SqlSiteMap] Where [ClassID]=@ClassID
SqlSiteMapProvider 
If @IsIncrease=1
SqlSiteMapProvider    
Begin  
SqlSiteMapProvider      
Update [SqlSiteMap] Set [DataNum]=[DataNum] + @Value Where [ClassID] InSelect ClassID From [SqlSiteMap] Where Len(Code)<=Len(@CodeAnd Code=Left(@Code,Len(Code)))
SqlSiteMapProvider    
End
SqlSiteMapProvider 
Else
SqlSiteMapProvider    
Begin
SqlSiteMapProvider      
Update [SqlSiteMap] Set [DataNum]=[DataNum] - @Value Where [ClassID] InSelect ClassID From [SqlSiteMap] Where Len(Code)<=Len(@CodeAnd Code=Left(@Code,Len(Code)))
SqlSiteMapProvider    
End
SqlSiteMapProvider 
----更新操作结束
SqlSiteMapProvider
 Set @s=@s+@Len
SqlSiteMapProvider
SqlSiteMapProvider   
End   
SqlSiteMapProvider
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET QUOTED_IDENTIFIER OFF 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SET ANSI_NULLS ON 
SqlSiteMapProvider
GO
SqlSiteMapProvider
SqlSiteMapProvider
SqlSiteMapProvider

 

 

<siteMap enabled="true" defaultProvider="AspNetSqlSiteMapProvider">
   
<providers>
    
<add name="AspNetSqlSiteMapProvider" type="FStudio.Provider.SqlSiteMapProvider,FStudio.Provider" securityTrimmingEnabled="true" connectionStringName="MainDB"/>
   
</providers>
  
</siteMap>
  
<authentication mode="Forms">
   
<forms loginUrl="/log.aspx"  defaultUrl="~/user/UserTrade.aspx" timeout="120"/>
  
</authentication>
  
<roleManager defaultProvider="SqlProvider" enabled="true" cacheRolesInCookie="true" cookieName=".WOW52.COOKIENAME" cookieTimeout="120" cookieRequireSSL="false" cookieSlidingExpiration="true" createPersistentCookie="true" cookieProtection="All">
   
<providers>
    
<add name="SqlProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="MainDB" applicationName="WOW52.CN"/>
   
</providers>
  
</roleManager>
  
<membership defaultProvider="SqlProvider">
   
<providers>
    
<add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="MainDB" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" passwordFormat="Hashed" minRequiredNonalphanumericCharacters="0" minRequiredPasswordLength="6" requiresUniqueEmail="false" applicationName="WOW52.CN"/>
   
</providers>
  
</membership>

相关文章: