<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      面向對象在數據庫應用程序中的應用(dotNet)

      [摘要]面向對象在數據庫應用程序中的應用(dotNet) 現在的應用程序很大一部分都是與數據庫相關的程序,而寫數據庫程序會涉及到很多數據表,訪問和操縱數據表構成了數據庫應用程序最常見的動作,所...
      面向對象在數據庫應用程序中的應用(dotNet)



      現在的應用程序很大一部分都是與數據庫相關的程序,而寫數據庫程序會涉及到很多數據表,訪問和操縱數據表構成了數據庫應用程序最常見的動作,所以,編寫出高效的程序對于程序員來說是不得不去考慮的。本文將討論這個話題,希望對讀者朋友有所裨益。



      面向對象是當今程序界的普遍編程思想,他具有三個最基本的特征:封裝、繼承和多態。繼承對于代碼的復用非常有效,多態則是指函數(方法)的多種形態,可以通過子類重寫父類的方法來改變對象的行為,在面向對象編程中起到非常重要的作用。那么,在實際應用中,到底能起到什么樣的作用呢?也許使用例子最能表達這個思想。



      比如,我們要寫一個簡單的論壇程序,經過分析,可以得出需要下面的表:用戶表(Users)、版塊表(BBSBlock)、回復表(Reply)、主題表(Topic)等(為了方便代碼的繼承,我把所有表的id號都設成相同的名稱:id)。對于這些表,都有一些相同的操作:瀏覽,刪除,添加和修改。那么,我們是不是對每個表都寫對應的方法來實現呢?顯示,這種方法是笨拙的。而繼承,在這里就會發揮極為重要的作用。思想是:寫一個父類,把這些基本的操作寫好,然后,將每個表抽象成一個類,并繼承剛才創建的父類,此時,所有的子類都具有這些基本操作了。



      我們可以這樣定義父類:

      public class DBBaseClass

      {

      protected string TableName;//表名

      protected SqlConnection con;//連接對象



      public DBBaseClass():this("Users")

      {

      }

      /// <summary>

      /// 構造函數

      /// </summary>

      /// <param name="TableName">表名</param>

      public DBBaseClass(string TableName)

      {

      this.TableName = TableName;

      if(con == null)

      {

      con = new SqlConnection("server=accp-lzh;database=MissBBS;uid=sa;pwd=sa");

      }

      else

      {

      if(con.State == ConnectionState.Open)

      con.Close();

      }

      }



      /// <summary>

      /// 獲取數據集

      /// </summary>

      /// <param name="count">如果count為0,則獲取所有數據集,否則獲取指定條數(從頂部)的記錄</param>

      /// <returns>返回DataSet</returns>

      public DataSet Select(int count)

      {

      string sql;

      if(count == 0)

      sql = "select * from " + this.TableName ;

      else

      sql = "select top " + count.ToString() + " * from " + this.TableName + " oreder by id desc";

      SqlCommand selectCmd = new SqlCommand(sql,con);



      SqlDataAdapter adapter = new SqlDataAdapter();

      adapter.SelectCommand = selectCmd;



      DataSet ds = new DataSet();

      try

      {

      con.Open();

      adapter.Fill(ds,"BBSTable");

      con.Close();

      }

      catch(Exception)

      {

      return null;

      }



      return ds;

      }



      }



      在這個類中,我們定義了兩個重載的構造函數和一個用來獲取數據集的方法,同時,定義了兩個作用很大的字段,一個是表名,一個是連接對象。當其他類繼承這個類時,就不再需要再次定義表和連接對象了,最主要是的,這兩個字段為我們更好的實現繼承起到了關鍵的作用。



      接下來,我們創建一個子類:Users。這個類是表Users的抽象:

      public class User : DBBaseClass

      {

      /// <summary>

      /// 無參構造函數

      /// </summary>

      public User():base("Users")

      {

      }



      /// <summary>

      /// 構造函數

      /// </summary>

      /// <param name="TableName">表名</param>

      public User(string TableName) : base(TableName)

      {

      }

      }



      現在,大家可以看出來,我們只是寫了該類的兩個構造函數,就具有返回表中所有數據集的功能了,因為該表繼承了DBBaseClass。



      同樣,我們再寫一個子類:Topic,該類是表Topic的抽象。

      public class Topic : DBBaseClass

      {

      public Topic() : base("Topic")

      {

      }



      public Topic(string TableName) : base(TableName)

      {

      }

      }



      和User一樣,該類也同樣具有了返回所有數據集的功能。



      實例化子類時,采用簡單對象工廠設計模式,返回不同類型的對象。

      public class Factory

      {

      public Factory()

      {



      }



      public static DBBaseClass GetObject(string TableName)

      {

      switch(TableName)

      {

      case "Users" :

      return new User();



      case "Topic":

      return new Topic();



      case "BBSBlock":

      return new BBSBlock();



      case "Reply":

      return new Reply();



      case "BBSMaster":

      return new BBSMaster();



      default:

      return new DBBaseClass();

      }

      }

      }



      下面來看一看如何使用:

      User user = (User)Factory.GetObject("Users");

      DataSet ds1 = new DataSet();

      ds1 = user.Select(0);



      Topic topic = (Topic)Factory.GetObject("Topic");

      DataSet ds2 = new DataSet();

      ds2 = topic.Select(0);



      看完之后,您有什么想法?如果您是一個經驗豐富的程序員,這種方法肯定會經常采用,如果您剛剛接觸,理解這種思想還是大有好處的。




      日韩精品一区二区三区高清