系統環境:
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,是一個比較成熟知識管理、協作平台了。