◆勇敢者論壇源代碼分析系列(1)—數據查詢
前言:勇敢者論壇是一個開放源碼的ASP.NET c#論壇,使用VS.NET 2005開發管理,可以支持兩種數據庫 SQL2000或Accsee。作者的開發本意,就是提供給大家學習使用的。寫本系列代碼分析,也是爲了初學者更快的入門和進步。祝大家學習愉快!多多指教。
勇敢者論壇: 程序演示 源碼下載
記得當時初學編程的時候,如果實現了一個小的功能,即使是拿別人的代碼拼湊出來的,心裏那個樂啊,都別提多高興了。很懷念當時的感覺。
記住:每天積累,總有一天,你會成爲高手。
本文章系列儘量保持實用的原則,使初學者能夠逐步掌握一些小技巧,利用一些淺顯易懂的例子,引導大家掌握一些學習和開發的方法,方法掌握了,以後進步就會很順利了。
對於靜態網頁的製作,只要掌握一些靜態標籤,樣式規定等就可以了,另外有很多設計工具,比如dreamwaver等,使得設計人員能夠更加輕鬆的進行設計,由於這些軟件的智能性,你甚至可以不是很精通那些標籤,就能設計出自己的homepage。在確認你能夠比較熟練的掌握靜態網頁製作的基礎上,就可以慢慢進入動態網站的設計了。
其實製作動態網站,也不需要想象的多難,多複雜,把需要的最基本的技術分解一下,可以這樣認爲:動態網站,就是以數據庫爲基礎,能夠跟用戶實現一些互動功能,如用戶註冊、用戶登錄、用戶管理、發帖跟貼、瀏覽帖子、修改帖子等等的網站。核心在於網站程序對數據庫的操作,而對操作數據庫來講,只要你掌握了select, insert, update, delete四大操作方法,就算對數據庫操作掌握了大半,基本的動態網站,應該都能做出來了。想想是不是這樣:用戶註冊(insert)、用戶登錄(select)、用戶管理(update)、發帖跟貼(insert)、用戶登錄(select) 、瀏覽帖子(select) 、修改帖子(update)。
今天我們就學習select,以勇敢者論壇(開放源碼的ASP.NET論壇) 的 Main.aspx 這個頁面爲例子,看看是怎麼把帖子列表顯示出來的。 打開代碼,我們可以看到 <uc1:maindl id="MainDL1" runat="server"> </uc1:maindl>,這是調用了一個用戶控件,從最上邊幾行,我們可以找到 <%@ Register TagPrefix="uc1" TagName="MainDL" Src="MainDL.ascx" %>,說明這個調用的是 MainDL.ascx,那麼我們就看看 MainDL.ascx吧。 從MainDL.ascx中找到 <asp:datalist id="DataList1" Width="100%" runat="server">。
DataList Web 服務器控件以某種格式顯示數據,這種格式可以使用模板和樣式進行定義。DataList 控件可用於任何重複結構中的數據,如表。DataList 控件可以以不同的佈局顯示行,如按列或行對數據進行排序。
查看代碼,看看如何綁定數據的,首先是綁定時機,當然是在 Page_Load 的時候最好了:
protected void Page_Load(object sender, System.EventArgs e)
{
// 從web.config中讀取顯示條數。
int PageSize=System.Convert.ToInt32(System.Configuration.ConfigurationSettings.AppSettings["MainList"]);
//查詢數據
this.DataList1.DataSource=DBOperate.SelectFormForum("SELECT A.Q_ID,A.solved, A.author, A.ImageName, A.HiteCounter, A.AnsCounter, A.ReleaseTime, A.ReferTime, A.BigClass_ID, A.SmallClass_ID, A.kind, A.ReleaseTime, A.ReferTime, A.BigClass_ID, A.SmallClass_ID, A.kind, A.pith, Big_Class.BigClass_Name, Small_Class.SmallClass_Name, A.Q_content,A.Q_Note FROM Questions A,Small_Class, Big_Class WHERE A.SmallClass_ID = Small_Class.SmallClass_ID and A.BigClass_ID = Big_Class.BigClass_ID and (A.kind > 0) AND (A.kind < 5) AND( A.solved = 0) ORDER BY A.ReleaseTime DESC",0,PageSize,"Questions");
//綁定數據
this.DataList1.DataBind();
}
查詢數據調用了 DBOperate類的 SelectFormForum函數,在SelectFormForum上,鼠標右鍵菜單-〉轉到定義,可以看到DBOperate.cs文件中的
//輸入SELECT語句,獲得返回數據集
public static DataTable SelectFormForum(string sql,int start,int size,string tablename)
{
try
{
//讀數據庫類型
string DBtype = ConfigurationManager.AppSettings["DBtype"];
if (DBtype == "Accsee")
{
//Accsee 數據庫查詢操作
DBsql exsql = new DBsql();
exsql.Open();
OleDbDataAdapter da = new OleDbDataAdapter(sql, exsql.con);
DataSet ds = new DataSet();
da.Fill(ds, start, size, tablename);
exsql.Close();
return ds.Tables[0];
}
else
{
//sql server 數據庫查詢操作
SqlConnection sqlConnection = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["DBConnection"]);
SqlDataAdapter sqlAdapter1 = new SqlDataAdapter(sql, sqlConnection);
DataSet returns = new DataSet();
sqlAdapter1.Fill(returns, start, size, tablename);
return returns.Tables[0];
}
}
catch (Exception ex)
{
throw (ex);
}
}
訓練:做一個簡單的數據庫(Accsee/sql server均可,根據實際情況,把 SelectFormForum函數中 if (DBtype == "Accsee")的內容化減一半就可以了),建立一個表,填入少量數據,利用上邊介紹的方法把這個表裏的數據讀出來吧!
--------------------------------------------------------------
有什麼不明確的,可以提出來討論。高手和有寫作經驗的朋友,歡迎指點!
勇敢者論壇: 程序演示 源碼下載
記得當時初學編程的時候,如果實現了一個小的功能,即使是拿別人的代碼拼湊出來的,心裏那個樂啊,都別提多高興了。很懷念當時的感覺。
記住:每天積累,總有一天,你會成爲高手。
本文章系列儘量保持實用的原則,使初學者能夠逐步掌握一些小技巧,利用一些淺顯易懂的例子,引導大家掌握一些學習和開發的方法,方法掌握了,以後進步就會很順利了。
對於靜態網頁的製作,只要掌握一些靜態標籤,樣式規定等就可以了,另外有很多設計工具,比如dreamwaver等,使得設計人員能夠更加輕鬆的進行設計,由於這些軟件的智能性,你甚至可以不是很精通那些標籤,就能設計出自己的homepage。在確認你能夠比較熟練的掌握靜態網頁製作的基礎上,就可以慢慢進入動態網站的設計了。
其實製作動態網站,也不需要想象的多難,多複雜,把需要的最基本的技術分解一下,可以這樣認爲:動態網站,就是以數據庫爲基礎,能夠跟用戶實現一些互動功能,如用戶註冊、用戶登錄、用戶管理、發帖跟貼、瀏覽帖子、修改帖子等等的網站。核心在於網站程序對數據庫的操作,而對操作數據庫來講,只要你掌握了select, insert, update, delete四大操作方法,就算對數據庫操作掌握了大半,基本的動態網站,應該都能做出來了。想想是不是這樣:用戶註冊(insert)、用戶登錄(select)、用戶管理(update)、發帖跟貼(insert)、用戶登錄(select) 、瀏覽帖子(select) 、修改帖子(update)。
今天我們就學習select,以勇敢者論壇(開放源碼的ASP.NET論壇) 的 Main.aspx 這個頁面爲例子,看看是怎麼把帖子列表顯示出來的。 打開代碼,我們可以看到 <uc1:maindl id="MainDL1" runat="server"> </uc1:maindl>,這是調用了一個用戶控件,從最上邊幾行,我們可以找到 <%@ Register TagPrefix="uc1" TagName="MainDL" Src="MainDL.ascx" %>,說明這個調用的是 MainDL.ascx,那麼我們就看看 MainDL.ascx吧。 從MainDL.ascx中找到 <asp:datalist id="DataList1" Width="100%" runat="server">。
DataList Web 服務器控件以某種格式顯示數據,這種格式可以使用模板和樣式進行定義。DataList 控件可用於任何重複結構中的數據,如表。DataList 控件可以以不同的佈局顯示行,如按列或行對數據進行排序。
查看代碼,看看如何綁定數據的,首先是綁定時機,當然是在 Page_Load 的時候最好了:
protected void Page_Load(object sender, System.EventArgs e)
{
// 從web.config中讀取顯示條數。
int PageSize=System.Convert.ToInt32(System.Configuration.ConfigurationSettings.AppSettings["MainList"]);
//查詢數據
this.DataList1.DataSource=DBOperate.SelectFormForum("SELECT A.Q_ID,A.solved, A.author, A.ImageName, A.HiteCounter, A.AnsCounter, A.ReleaseTime, A.ReferTime, A.BigClass_ID, A.SmallClass_ID, A.kind, A.ReleaseTime, A.ReferTime, A.BigClass_ID, A.SmallClass_ID, A.kind, A.pith, Big_Class.BigClass_Name, Small_Class.SmallClass_Name, A.Q_content,A.Q_Note FROM Questions A,Small_Class, Big_Class WHERE A.SmallClass_ID = Small_Class.SmallClass_ID and A.BigClass_ID = Big_Class.BigClass_ID and (A.kind > 0) AND (A.kind < 5) AND( A.solved = 0) ORDER BY A.ReleaseTime DESC",0,PageSize,"Questions");
//綁定數據
this.DataList1.DataBind();
}
查詢數據調用了 DBOperate類的 SelectFormForum函數,在SelectFormForum上,鼠標右鍵菜單-〉轉到定義,可以看到DBOperate.cs文件中的
//輸入SELECT語句,獲得返回數據集
public static DataTable SelectFormForum(string sql,int start,int size,string tablename)
{
try
{
//讀數據庫類型
string DBtype = ConfigurationManager.AppSettings["DBtype"];
if (DBtype == "Accsee")
{
//Accsee 數據庫查詢操作
DBsql exsql = new DBsql();
exsql.Open();
OleDbDataAdapter da = new OleDbDataAdapter(sql, exsql.con);
DataSet ds = new DataSet();
da.Fill(ds, start, size, tablename);
exsql.Close();
return ds.Tables[0];
}
else
{
//sql server 數據庫查詢操作
SqlConnection sqlConnection = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["DBConnection"]);
SqlDataAdapter sqlAdapter1 = new SqlDataAdapter(sql, sqlConnection);
DataSet returns = new DataSet();
sqlAdapter1.Fill(returns, start, size, tablename);
return returns.Tables[0];
}
}
catch (Exception ex)
{
throw (ex);
}
}
訓練:做一個簡單的數據庫(Accsee/sql server均可,根據實際情況,把 SelectFormForum函數中 if (DBtype == "Accsee")的內容化減一半就可以了),建立一個表,填入少量數據,利用上邊介紹的方法把這個表裏的數據讀出來吧!
--------------------------------------------------------------
有什麼不明確的,可以提出來討論。高手和有寫作經驗的朋友,歡迎指點!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.