首页 新生命讲座 ASP学习 Net编程 我的垃圾工具 我的宝贝 系统编程
编译原理 其它文章
 -> 首页 -> ASP学习
动网Dvbbs 8.0.0sp1 AC版转SQL版
作者:大石头   来源:   发布时间:2007-8-18 8:59:29   共有674位读者阅读过此文


    由于项目需要一个支持MSSQL数据库的论坛,我打算用动网,但是动网SQL是需要用钱买的,所以只好想办法自动动手改了。

    8.0刚出来的时候,我发现动网的代码是数据库“兼容”的,也就是同时拥有AC和MSSQL的代码,仅仅以一个开关来识别是哪种数据库,这个开关就是conn.asp中的IsSqlDataBase,设置为1时,就是使用MSSQL数据库。

    在一些地方,和IsSqlDataBase一起出现的开关还有IsBuss,根据注释可以知道,它指定是否商业版,搜索所有用到它的地方就可以发现,它和IsSqlDataBase一起出现的地方,就是判断是否使用存储过程的地方。也就是说,仅仅设置IsSqlDataBase还不行,还要设置IsBuss,用了存储过程,才能充分体现MSSQL的优势。

    到这里,代码上所要做的工作就是设置IsSqlDataBase为1,IsBuss默认已经是1了。

    下面来看看数据库。AC和MSSQL是“本家”,兼容自然很好,我就使用AC的升迁功能(在工具那里找),把AC数据库升迁到MSSQL。之所以不用MSSQL的导入导出向导,是因为那样导不能很好处理自增列以及一些别的东西。

    导完数据后,还是运行不了,因为缺少了那几个存储过程,当然,如果把IsBuss设置为0,不用存储过程,下面的工作就不用做了。

    废话就不多说,下面直接给出各个存储过程的SQL:
以下是代码片段:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Dv_TSQL]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[Dv_TSQL]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Dv_loadSetup]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[Dv_loadSetup]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[dv_Dispbbs]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[dv_Dispbbs]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[dv_list]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[dv_list]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[dv_toplist]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[dv_toplist]
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE PROCEDURE [Dv_TSQL]
@tsql varchar(500)
 AS
exec(@tsql)

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE PROCEDURE [Dv_loadSetup]

AS
Select * from [Dv_setup]


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE PROCEDURE [dv_Dispbbs]
@boardid int=1,
@pagenow int=1,  --当前页数            
@pagesize int=1, --定义每页面帖子数目
@Announceid int=1,
@TotalUseTable nvarchar(10) ='Dv_bbs1'

AS
set nocount on
Select AnnounceID from [Dv_bbs1]   Where  BoardID=@BoardID And RootID=@Announceid Order By  AnnounceID


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE PROCEDURE [dv_list]
@boardid int=1,
@pagenow int=1, --当前页数            
@pagesize int=1, --定义每页面帖子数目
@tl int=0,  --按时间段查询
@topicmode int=0, --专题
@totalrec int output

 AS
set nocount on
declare @int_topnum int
declare @int_timenum int
declare @var_times varchar(5000)

if @pagenow>1
 if @topicmode>0
 begin
 select @int_timenum=(@pagenow-1)*@pagesize
 set rowcount @int_timenum
 select @var_times=lastposttime from Dv_Topic where mode=@topicmode and boardID=@boardID and istop = 0 ORDER BY lastposttime desc

 set rowcount @pagesize
 select TopicID,boardid,title,postusername,postuserid,dateandtime,child,hits,votetotal,lastpost,lastposttime,istop,isvote,isbest,locktopic,Expression,TopicMode,Mode,GetMoney,GetMoneyType,UseTools,IsSmsTopic,HideName from dv_topic where mode=@topicmode and boardID=@boardID and istop = 0 and lastposttime < @var_times ORDER BY lastposttime desc

 set nocount off
 return
 end
 else
 begin
 select @int_timenum=(@pagenow-1)*@pagesize
 set rowcount @int_timenum
 select @var_times=lastposttime from Dv_Topic where boardID=@boardID and istop = 0 ORDER BY lastposttime desc

 set rowcount @pagesize
 select TopicID,boardid,title,postusername,postuserid,dateandtime,child,hits,votetotal,lastpost,lastposttime,istop,isvote,isbest,locktopic,Expression,TopicMode,Mode,GetMoney,GetMoneyType,UseTools,IsSmsTopic,HideName from dv_topic where boardID=@boardID and istop = 0 and lastposttime < @var_times ORDER BY lastposttime desc

 set nocount off
 return
 end

else
 if @topicmode>0
 begin
 set rowcount @pagesize
 select TopicID,boardid,title,postusername,postuserid,dateandtime,child,hits,votetotal,lastpost,lastposttime,istop,isvote,isbest,locktopic,Expression,TopicMode,Mode,GetMoney,GetMoneyType,UseTools,IsSmsTopic,HideName from Dv_topic where mode=@topicmode and boardID=@boardid and istop = 0  ORDER BY lastposttime desc
 end
 else
 begin
 set rowcount @pagesize
 select TopicID,boardid,title,postusername,postuserid,dateandtime,child,hits,votetotal,lastpost,lastposttime,istop,isvote,isbest,locktopic,Expression,TopicMode,Mode,GetMoney,GetMoneyType,UseTools,IsSmsTopic,HideName from Dv_topic where boardID=@boardid and istop = 0 ORDER BY lastposttime desc
 end

 

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE PROCEDURE [dv_toplist]
@pagenow int  ,
@pagesize int ,
@reture_value int output,
@intUserRecordCount int output
as
/*定义局部变量*/
declare @intBeginID int
declare @intEndID int
declare @intPageCount int
declare @intRowCount int

/*关闭计数*/
set nocount on

/*求总用户数*/
select @intUserRecordCount = count(*) from [dv_user]
if (@intUserRecordCount = 0) --如果没有用户,则返回零
set @reture_value =0
 
/*判断页数是否正确*/
if (@pagenow - 1) * @pagesize > @intUserRecordCount
set @reture_value =1
--return (-1)

/*求开始userID*/
set @intRowCount = (@pagenow - 1) * @pagesize + 1
/*限制条数*/
set rowcount @intRowCount
select @intBeginID = userid from [dv_user] order by userid desc

/*结束userID*/
set @intRowCount = @pagenow * @pagesize
/*限制条数*/
set rowcount @intRowCount
select @intEndID = userid from [dv_user] order by userid desc

/*恢复系统变量*/
set rowcount 0
set nocount off

select username,useremail,userclass,UserIM,UserPost,JoinDate,userwealth,userid from [dv_user] where userid between @intEndID and @intBeginID order by userid desc
return(@@rowcount)
--select @@rowcount

 

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

 


评论
ADS 2008-4-10 12:57:19
ASD

邪炎十三少 2008-4-3 10:51:30
错误类型: Microsoft VBScript 运行时错误 (0x800A000D) 类型不匹配 /项目/bbs/Dvbbs8.2.0_Ac/inc/Dv_ClsMain.asp, 第 867 行 浏览器类型: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) 网页: GET /项目/bbs/Dvbbs8.2.0_Ac/admin/Index.asp 时间: 2008年4月3日, 10:52:00 详细信息: Microsoft 支持

airzen 2008-1-29 12:53:39
升迁过程中对于表BBS1有近8万条数据,会跳过,采用SQL导入会提示在75843处错误,将此记录删除后,再导,还是提示75843处错误.

cooker 2007-11-21 11:41:34
DVBBS加上TOPFISHER采集软件,瞬间就可以打造出一个完美的论坛啊,呵。

jack 2007-10-29 10:59:26
同问 楼上的 呵呵.

nnnn 2007-9-18 17:51:14
测试

netwjx 2007-9-18 17:50:44
后来都没看dvbbs的变化了 累赘的东西太多 给客户用用还行

放飞远志 2007-9-15 9:00:11
大石头帅的带砸~

放飞远志 2007-9-15 8:59:43
大石头帅的掉砸!~ 我喜欢!~ 弄回去看看!~ 呵呵

路明 2007-8-28 12:50:55
靠 大石頭太帥了 哈哈 這個都給你發現了 大家就可以使用免費的商業版本的DVBBS咯

dd 2007-8-19 8:13:06
无下载?

发表评论
网名:
评论:
    
新生命 CMS1.0 Build0920 版权所有 All Copyrights @2006 桂ICP备06011573号
站长:大石头 信箱:gxuhy@21cn.com QQ:99363590