天天看点

AspNetForums1.0安装手记

系统环境:

Window2000、IIS5.0、DotNet Framework1.1、SqlServer2000

一、初始设置

将AspNetForums解压到一个目录DotNetForum当中,有如下目录:

--AspNetForums

--Engine

--Install_Images

--SQLScripts

--SqlUpgradeScripts

在IIS当中将AspNetForums设为一个虚拟目录AspNetForums(其他名字也无所谓),NT ACL权限允许Everyone访问。

在SqlServer2000中创建一个数据库AspNetForums,使用其他名字也没有关系,在AspNetForums目录中Web.Config文件里<add key="connectionString" value="server=localhost;Trusted_Connection=true;database=AspNetForums;" />节点,这个节点设置连接字符串的属性,默认就是AspNetForums。

在AspNetForums数据库中运行SQLScripts中的四个SQL脚本,按照1、2、3、4的顺序执行。

由于我是通过自己手动创建了数据库,所以运行第一个脚本提示有些错误,不过也没有关系,顺利执行。

初始设置完毕!

二、调试运行

将Web.Config的<compilation debug="false" />节点改为<compilation debug="true" />,以使它能在编译情况下调试。

然后访问http://localhost/AspNetForums/

1、运行错误一

出现错误提示:

无法打开登录 'AspNetForums' 中请求的数据库。登录失败。用户 'HOB/ASPNET' 登录失败(HOB/ASPNET是我的机器上的ASPNET配置帐户)。

根据堆栈跟踪,发现是System.Data.SqlClient.SqlConnection连接失败,我以为是连接字符串没有设置用户帐号、密码的缘故,于是修改<add key="connectionString" value="server=localhost;Trusted_Connection=true;database=AspNetForums;uid=sa;pwd=sa" />,但是仍然出错,仔细一看这个连接字符串还有一个Trusted_Connection属性。原来他使用Windows 帐户凭据进行数据库访问的身份验证,加了uid也没有用。

所以可以有两种选择,去掉Trusted_Connection=true,或者在数据库中增加HOB/ASPNET这个用户,并让他属于AspNetForums的db_owner的角色。

我选择在数据库增加HOB/ASPNET这个帐户。

通过!!

2、运行错误二

运行下来,出现错误提示:

无法解决 equal to 操作的排序规则冲突。

根据堆栈跟踪,检查了AspNetForums.Data.SqlDataProvider.GetSiteStatistics这个方法(源代码可以从Engine的工程中找到),发现他访问了forums_GetStatistics这个存储过程。

检查数据库存储过程发现错误出在他调用的另一个存储过程上Statistics_ResetTopPosters,有几条类似于:

UPDATE Users SET Attributes = (convert(int, Attributes) & 0xFFFFFFF3)

WHERE Username = (SELECT Username FROM #Top500Users WHERE Rank = @LoopCounter)

这样的语句。

由于子查询的结果集排序规则为数据库默认(我的数据库为China_PRC排序),而User这张表的UserName字段采用SQL_Latin1_General_CP1_CI_AS排序规则,因此发生equal to的排序规则冲突。

可以给临时表#Top500Users的UserName字段增加一个SQL_Latin1_General_CP1_CI_AS排序规则,或者用一个变量来存放查询结果(也就一条结果)。

最后运行成功!!

最近想找一个结构良好的开源论坛,希望是C#编写的,于是就想到了AspNetForums,我下载的是一个1.0版本,运行了一下发现还有些问题,就记录下来了。AspNetForums如今他已经发展为了CommunityServer,是一个比较成熟知识管理、协作平台了。