◆勇敢者論壇源代碼分析系列(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")的內容化減一半就可以了),建立一個表,填入少量數據,利用上邊介紹的方法把這個表裏的數據讀出來吧!

--------------------------------------------------------------

有什麼不明確的,可以提出來討論。高手和有寫作經驗的朋友,歡迎指點!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章