• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Web環(huán)境的數(shù)據(jù)訪問(wèn)技術(shù)優(yōu)化研究

      2010-05-13 08:46:00張志強(qiáng)
      現(xiàn)代電子技術(shù) 2009年12期
      關(guān)鍵詞:優(yōu)化方案

      張志強(qiáng)

      摘 要:在Web應(yīng)用軟件中,需要利用ADO.NET訪問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù)。常規(guī)的數(shù)據(jù)訪問(wèn)技術(shù)因訪問(wèn)的數(shù)據(jù)量較大而需消耗大量的內(nèi)存空間;同時(shí)網(wǎng)絡(luò)中的傳輸數(shù)據(jù)也會(huì)因數(shù)據(jù)量大而占用過(guò)多的帶寬,從而使軟件的整體性能降低。為提高軟件性能,對(duì)常規(guī)的數(shù)據(jù)訪問(wèn)技術(shù)進(jìn)行優(yōu)化研究,提出并設(shè)計(jì)按頁(yè)為單位訪問(wèn)數(shù)據(jù)的優(yōu)化方案。因該優(yōu)化方案每次訪問(wèn)的數(shù)據(jù)量較小,從而有效地解決了上述問(wèn)題,在實(shí)際應(yīng)用中有很大的意義。

      關(guān)鍵詞:Web應(yīng)用軟件;ADO.NET;數(shù)據(jù)訪問(wèn)技術(shù);優(yōu)化方案

      中圖分類(lèi)號(hào):TP393.09文獻(xiàn)標(biāo)識(shí)碼:A

      文章編號(hào):1004-373X(2009)12-039-03

      Optimization Research of Data Access Technology Based on Web Environment

      ZHANG Zhiqiang

      (College of Information Science and Technology,Chengdu University,Chengdu,610106,China)

      Abstract:In Web applications,it is necessary to access database by using ADO.NET.The conventional data access technology needs to consume a large amount of memory space,because in accessing,a large amount of data is needed.At the same time,in the network,too much bandwidth can be taken up if large amounts of data are transformed,so that the software′s overall performance is lowered.To enhance the performance of software,the paper carries out an optimization research on the conventional data access technology and designs an optimization program according to the data access which takes page as the unit.As the optimization program for each access needs only a small amount of data,the above problems are effectively solved,thus the program can be expected to play an important role in practice.

      Keywords:Web application software;ADO.NET;data access technology;optimization program

      0 引 言

      在使用ASP.NET開(kāi)發(fā)Web應(yīng)用軟件的過(guò)程中,前臺(tái)客戶(hù)端經(jīng)常需要從后臺(tái)數(shù)據(jù)庫(kù)中訪問(wèn)數(shù)據(jù),并在客戶(hù)端顯示與維護(hù)數(shù)據(jù)。常規(guī)的數(shù)據(jù)訪問(wèn)操作是利用ADO.NET從后臺(tái)數(shù)據(jù)庫(kù)中訪問(wèn)數(shù)據(jù),填充到數(shù)據(jù)集(DataSet)中的數(shù)據(jù)表(DataTable)里,并將DataTable中的數(shù)據(jù)綁定到控件(GridView)中(實(shí)際就是在網(wǎng)絡(luò)中傳輸數(shù)據(jù))。 當(dāng)多個(gè)客戶(hù)端從后臺(tái)數(shù)據(jù)庫(kù)中訪問(wèn)的數(shù)據(jù)量非常大時(shí),會(huì)使DataTable中的數(shù)據(jù)量很大,在服務(wù)器端和客戶(hù)端將消耗大量的內(nèi)存空間存放這些數(shù)據(jù);同時(shí)當(dāng)大量的數(shù)據(jù)在網(wǎng)絡(luò)中傳輸時(shí)也會(huì)占用過(guò)多的網(wǎng)絡(luò)帶寬,從而降低了整個(gè)應(yīng)用軟件的性能。為了解決上述問(wèn)題,需要優(yōu)化常規(guī)的數(shù)據(jù)訪問(wèn)技術(shù),減少訪問(wèn)的數(shù)據(jù)量,從而提高應(yīng)用軟件的整體性能。

      1 數(shù)據(jù)訪問(wèn)機(jī)制

      從后臺(tái)數(shù)據(jù)庫(kù)中訪問(wèn)數(shù)據(jù)是利用ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)接口技術(shù)實(shí)現(xiàn)數(shù)據(jù)的讀寫(xiě)。ADO.NET的前身是ADO(ActiveX Data Objects),它是Microsoft.NETFramework的主要數(shù)據(jù)庫(kù)訪問(wèn)技術(shù),為用戶(hù)建立Web應(yīng)用軟件提供了統(tǒng)一、一致的數(shù)據(jù)庫(kù)接口。在Visual Studio.NET開(kāi)發(fā)環(huán)境下,利用該技術(shù),采用C#開(kāi)發(fā)語(yǔ)言實(shí)現(xiàn)基于Web環(huán)境的數(shù)據(jù)庫(kù)訪問(wèn)操作。ADO.NET 是為基于消息的 Web 應(yīng)用軟件而設(shè)計(jì)的,通過(guò)支持對(duì)數(shù)據(jù)的松耦合訪問(wèn),可減少與數(shù)據(jù)庫(kù)的活動(dòng)連接數(shù)目(即減少了多個(gè)用戶(hù)爭(zhēng)用數(shù)據(jù)庫(kù)服務(wù)器上的有限資源的可能性),從而實(shí)現(xiàn)最大程度的數(shù)據(jù)共享。ADO.NET 還通過(guò)對(duì)分布式應(yīng)用程序的基本對(duì)象DataSet,支持基于 XML 的持久性和傳輸格式,以實(shí)現(xiàn)最大程度的數(shù)據(jù)共享。DataSet是一種關(guān)系數(shù)據(jù)結(jié)構(gòu),使用 XML 進(jìn)行訪問(wèn)、寫(xiě)入或序列化。ADO.NET中的DataSet使得生成要求應(yīng)用層與多個(gè) Web 站點(diǎn)之間進(jìn)行松耦合數(shù)據(jù)交換的應(yīng)用軟件變得很方便。

      ADO.NET提供兩種數(shù)據(jù)訪問(wèn)模式;一種為連接模式(Connected),與原來(lái)的ADO相兼容;另一種為非連接模式(Disconnected),這是ADO.NET中所提供的新技術(shù)。對(duì)于非連接模式,有許多優(yōu)點(diǎn),可以有效地減少數(shù)據(jù)庫(kù)的連接數(shù),降低為維護(hù)數(shù)據(jù)庫(kù)的連接而帶來(lái)的開(kāi)銷(xiāo),從而可以提高軟件的性能和規(guī)模。因此很多數(shù)據(jù)庫(kù)的訪問(wèn)操作都采用非連接模式來(lái)完成,這也是常規(guī)數(shù)據(jù)訪問(wèn)技術(shù)所采取的方式。

      非連接模式的數(shù)據(jù)訪問(wèn)機(jī)制主要是從后臺(tái)數(shù)據(jù)庫(kù)中訪問(wèn)數(shù)據(jù),并填充到DataSet中的DataTable對(duì)象里。然后將DataTable對(duì)象中的數(shù)據(jù)綁定到客戶(hù)端界面的數(shù)據(jù)表示控件上進(jìn)行數(shù)據(jù)顯示與維護(hù)。常用的數(shù)據(jù)表示控件有GridView控件、DataList控件等。ADO.NET非連接模式下數(shù)據(jù)訪問(wèn)操作的應(yīng)用結(jié)構(gòu)如圖1所示。

      圖1 非連接模式的數(shù)據(jù)訪問(wèn)機(jī)制

      2 常規(guī)的數(shù)據(jù)訪問(wèn)技術(shù)

      如果后臺(tái)數(shù)據(jù)庫(kù)系統(tǒng)是SQL Server 2000或SQL Server 2005,常規(guī)數(shù)據(jù)訪問(wèn)技術(shù)的實(shí)現(xiàn)是通過(guò)SqlDataAdapter對(duì)象執(zhí)行SQL語(yǔ)句來(lái)訪問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù),并填充到DataSet中的DataTable里。最后將DataTable中的數(shù)據(jù)綁定到GridView表中顯示與維護(hù)。實(shí)現(xiàn)的代碼如下:

      SqlConnection con = new SqlConnection("Data Source=zzq;Initial Catalog= keyanIN;Persist Security Info=True;User ID=sa;Password=123;Pooling=true");

      //建立數(shù)據(jù)庫(kù)連接對(duì)象,數(shù)據(jù)庫(kù)為SQL Server 2005,User ID為設(shè)置登錄數(shù)據(jù)庫(kù)的用戶(hù)名,

      //Password為登錄數(shù)據(jù)庫(kù)的密碼,pooling=true表示打開(kāi)連接池。

      string s = "select * from stu";//執(zhí)行SQL語(yǔ)句訪問(wèn)數(shù)據(jù)

      SqlDataAdapter da = new SqlDataAdapter(s,con);

      DataSet ds = new DataSet( );//建立數(shù)據(jù)集對(duì)象

      da.Fill(ds,"student"); //填充數(shù)據(jù)到數(shù)據(jù)表student中

      GridView1.DataSource = ds.Tables["student"].DefaultView;

      GridView1.DataBind( );//將數(shù)據(jù)表student的數(shù)據(jù)綁定到GridView1控件

      為了保證連接字符串的安全性,在實(shí)際應(yīng)用中連接字符串不能出現(xiàn)在網(wǎng)頁(yè)程序中,其在Web.config文件中設(shè)置;然后利用代碼完成連接字符串的讀取,并建立SqlConnection連接對(duì)象。在Web.config文件中設(shè)置連接字符串的方式如下(conn為連接字符串名):

      讀取連接字符串并建立連接對(duì)象的方式如下:

      SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);

      當(dāng)一頁(yè)無(wú)法顯示完數(shù)據(jù)時(shí),需要考慮分頁(yè)技術(shù)來(lái)完成多頁(yè)的數(shù)據(jù)顯示,采用的方法很多,例如:利用GridView控件的自動(dòng)分頁(yè)技術(shù)完成分頁(yè)操作。以這種常規(guī)技術(shù)訪問(wèn)數(shù)據(jù)時(shí),當(dāng)訪問(wèn)的數(shù)據(jù)量很大時(shí),DataTable中的數(shù)據(jù)會(huì)很多,需要更多的內(nèi)存空間來(lái)存儲(chǔ)數(shù)據(jù);將DataTable中的數(shù)據(jù)綁定到控件中顯示時(shí),因傳輸大量數(shù)據(jù)而占用更多的網(wǎng)絡(luò)帶寬,從而使系統(tǒng)的整體性能降低。要改變這種狀況,采用優(yōu)化的數(shù)據(jù)訪問(wèn)技術(shù),降低每次從數(shù)據(jù)庫(kù)中訪問(wèn)的數(shù)據(jù)量,從而可有效地降低內(nèi)存空間的消耗和所占網(wǎng)絡(luò)的帶寬。

      3 優(yōu)化的數(shù)據(jù)訪問(wèn)技術(shù)

      優(yōu)化訪問(wèn)技術(shù)的主要目的是降低從數(shù)據(jù)庫(kù)中訪問(wèn)的數(shù)據(jù)量。按頁(yè)為單位訪問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù)是一個(gè)很有效的方案。其訪問(wèn)的數(shù)據(jù)量遠(yuǎn)遠(yuǎn)小于訪問(wèn)所有數(shù)據(jù)的數(shù)據(jù)量。每頁(yè)的數(shù)據(jù)量可以動(dòng)態(tài)地進(jìn)行調(diào)整,以適應(yīng)實(shí)際的需求。實(shí)現(xiàn)優(yōu)化技術(shù),需要進(jìn)行2步操作,第一,確定整個(gè)數(shù)據(jù)量的頁(yè)數(shù),以及每頁(yè)的數(shù)據(jù)索引范圍;第二,修改訪問(wèn)數(shù)據(jù)的SQL 語(yǔ)句,以每頁(yè)的數(shù)據(jù)索引范圍為單位訪問(wèn)數(shù)據(jù)。這樣就可以實(shí)現(xiàn)只訪問(wèn)每頁(yè)指定范圍的需求數(shù)據(jù),而不是訪問(wèn)所有的需求數(shù)據(jù)。實(shí)現(xiàn)原理如圖2所示。

      圖2 優(yōu)化的數(shù)據(jù)訪問(wèn)

      下面用一個(gè)實(shí)例實(shí)現(xiàn)優(yōu)化方案。數(shù)據(jù)庫(kù)系統(tǒng)采用SQL Server 2005,數(shù)據(jù)庫(kù)中有3個(gè)數(shù)據(jù)表Unit,Employeer,keyan,分別為學(xué)校部門(mén)表、員工表、員工科研信息表。按職工姓名查詢(xún)其所有科研信息。實(shí)現(xiàn)的界面設(shè)計(jì)如圖3所示。

      圖3 界面設(shè)計(jì)

      3.1 分頁(yè)技術(shù)的實(shí)現(xiàn)

      3.1.1 數(shù)據(jù)記錄的獲取

      為了計(jì)算數(shù)據(jù)總頁(yè)數(shù),需獲取數(shù)據(jù)記錄的總數(shù),因此設(shè)計(jì)GetOrdersCount方法,以實(shí)現(xiàn)數(shù)據(jù)記錄總數(shù)的獲取。在該方法中,以員工姓名name作為動(dòng)態(tài)參數(shù)進(jìn)行動(dòng)態(tài)查詢(xún),并利用SQL語(yǔ)句中的count聚合函數(shù)獲取數(shù)據(jù)記錄總數(shù)。

      public virtual int GetOrdersCount(string qury )

      { Database d = new Database();

      string k;

      k = "select count(Unit.Unit_Name) from Employeer,Unit,keyan where Employeer.Unit_ID=Unit.Unit_ID and Employeer.Employeer_ID=keyan.Employeer_ID and Employeer.Employeer_Name=@name";//設(shè)計(jì)的SQL語(yǔ)句

      SqlConnection conn = … //利用前述的技術(shù)創(chuàng)建連接對(duì)象

      conn.Open( );//打開(kāi)連接

      SqlCommand cmd = new SqlCommand(k,conn);

      cmd.Parameters.Add("@name",SqlDbType.NVarChar,10);

      cmd.Parameters["@name"].Value = qury;

      //創(chuàng)建了帶參數(shù)查詢(xún)的命令對(duì)象,以name為查詢(xún)參數(shù),qury為具體的查詢(xún)值

      return (int)cmd.ExecuteScalar();//返回查詢(xún)的記錄條數(shù)

      }

      3.1.2 頁(yè)數(shù)的計(jì)算

      通過(guò)執(zhí)行GetOrdersCount方法獲取數(shù)據(jù)記錄總數(shù),并設(shè)置每頁(yè)訪問(wèn)的數(shù)據(jù)量(假設(shè)每頁(yè)訪問(wèn)10條記錄,每頁(yè)的記錄數(shù)可以根據(jù)需求進(jìn)行更改),從而計(jì)算出數(shù)據(jù)總頁(yè)數(shù)。計(jì)算總頁(yè)數(shù)的實(shí)現(xiàn)代碼如下所示。

      int count = this.GetOrdersCount(qury);// qury為具體的查詢(xún)值

      int PagesCount = count / 10; // PagesCount為總頁(yè)數(shù)

      int temp = count % 10;

      if (temp != 0)

      PagesCount++; //最后一頁(yè)不足10條記錄,任然為一頁(yè)累加到總頁(yè)數(shù)中

      3.2 數(shù)據(jù)訪問(wèn)技術(shù)的優(yōu)化實(shí)現(xiàn)

      3.2.1 數(shù)據(jù)訪問(wèn)的優(yōu)化設(shè)計(jì)

      在數(shù)據(jù)訪問(wèn)層的設(shè)計(jì)中,由GetData方法實(shí)現(xiàn)以頁(yè)為單位的數(shù)據(jù)訪問(wèn);該方法根據(jù)數(shù)據(jù)索引范圍對(duì)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn),從而極大地減少了服務(wù)器與客戶(hù)機(jī)之間傳送的數(shù)據(jù)流量。數(shù)據(jù)索引范圍由起始索引號(hào)和終止索引號(hào)組成,其中起始索引號(hào)由頁(yè)號(hào)確定;終止索引號(hào)=起始索引號(hào)+每頁(yè)數(shù)據(jù)記錄條數(shù)。在GetData方法中,以參數(shù)startRowIndex為指定的起始索引號(hào),以參數(shù)maximumRows為每頁(yè)數(shù)據(jù)記錄條數(shù)進(jìn)行SQL語(yǔ)句的優(yōu)化設(shè)計(jì),通過(guò)執(zhí)行優(yōu)化的SQL語(yǔ)句,完成指定范圍的數(shù)據(jù)訪問(wèn)。

      public DataView GetData(int startRowIndex,int maximumRows,string sortExpression,string qury)

      { //查詢(xún)指定索引范圍的數(shù)據(jù),startRowIndex為起始索引號(hào),maximumRows為查詢(xún)的記錄條數(shù) ,sortExpression為對(duì)結(jié)果的排序條件,qury為查詢(xún)值。

      string sql = @"with keyanTable as

      (select Unit.Unit_Name,Employeer.Employeer_Name,Employeer.Employeer_Degree,Employeer.Employeer_zhicheng,keyan.Keyan_content,keyan.keyan_class,keyan.Declare_time,ROW_NUMBER() OVER(ORDER BY {0}) as RowNumber

      from Employeer,Unit,keyan where Employeer.Unit_ID = Unit.Unit_ID and Employeer.Employeer_ID = keyan.Employeer_ID )

      select * from keyanTable where RowNumber > {1} and RowNumber <= {2} and keyanTable.Employeer_Name = ‘{3};"; //優(yōu)化后的SQL語(yǔ)句

      if (string.IsNullOrEmpty(sortExpression))

      sortExpression = "Employeer.Employeer_ID ASC";

      sql = string.Format(sql,sortExpression,startRowIndex,startRowIndex + maximumRows,qury);

      // startRowIndex起始索引號(hào);startRowIndex + maximumRows為終止索引號(hào)

      SqlConnection conn = ……//利用前述的技術(shù)創(chuàng)建連接對(duì)象

      SqlDataAdapter da = new SqlDataAdapter(sql,conn);

      DataSet ds = new DataSet();

      da.Fill(ds,”Information”);

      return ds.Tables[“Information”].DefaultView;//返回?cái)?shù)據(jù)視圖

      }

      3.2.2 表示層的設(shè)計(jì)

      在客戶(hù)端,根據(jù)指定頁(yè)確定數(shù)據(jù)索引范圍的起始索引號(hào),起始索引號(hào)通過(guò)公式:this.GetData(int.Parse(lb2.Text)×10-10計(jì)算得出。其中,int.Parse(lb2.Text)為客戶(hù)端指定的頁(yè)號(hào),10為每頁(yè)的記錄數(shù);每頁(yè)的數(shù)據(jù)訪問(wèn)量以每頁(yè)的記錄條數(shù)為標(biāo)準(zhǔn)。 將動(dòng)態(tài)生成的數(shù)據(jù)索引范圍作為參數(shù)執(zhí)行GetData方法,實(shí)現(xiàn)按照指定頁(yè)的數(shù)據(jù)索引范圍訪問(wèn)數(shù)據(jù)。

      string qurystr = TextBox8.Text.Trim();//獲取界面上的查詢(xún)值

      DataView dv = this.GetData(int.Parse(lb2.Text) * 10 - 10,10,"Employeer.Employeer_ID DESC",qurystr);

      // lb2.Text為訪問(wèn)的頁(yè)號(hào)值 ,10為每頁(yè)的訪問(wèn)的記錄數(shù)

      GridView1.DataSource = dv;

      GridView1.DataBind( );

      4 結(jié) 語(yǔ)

      對(duì)數(shù)據(jù)訪問(wèn)技術(shù)進(jìn)行優(yōu)化后,降低了對(duì)后臺(tái)數(shù)據(jù)庫(kù)的訪問(wèn)數(shù)據(jù)量,進(jìn)而減少了所占內(nèi)存空間的大小,降低了在網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)量。該優(yōu)化方案提高了Web應(yīng)用軟件運(yùn)行的性能,在實(shí)際使用時(shí)有很大的意義。

      參考文獻(xiàn)

      [1]陳建國(guó).開(kāi)發(fā)高性能ADO.NET應(yīng)用程序的探討[J].福建電腦,2007(1):177-178.

      [2][美]Glenn Johnson.ADO.NET 2.0高級(jí)編程[M].段超,譯.北京:清華大學(xué)出版社,2006.

      [3]陳永強(qiáng).SQL Server 2005 Web應(yīng)用開(kāi)發(fā)[M].北京:清華大學(xué)出版社,2008.

      [4]王強(qiáng),滕剛.微軟培訓(xùn)教材[Z].2008.

      [5]李昕,常革新,崔杰.基于ADO.NET的ASP.NET頁(yè)面程序[J].遼寧工程技術(shù)大學(xué)學(xué)報(bào):自然科學(xué)版,2006,25(2):250-252.

      [6]王磊.基于.NET平臺(tái)的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)[J].福建電腦,2006(12):75-89.

      [7]孔延香,李永忠,郭秀峰.ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)研究與實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2005,28(16):51-52,59.

      [8]林平榮.ADO.NET的數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)研究與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2008,7(1):1 198-1 201.

      [9]劉瑩.基于的ADO.NET數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)研究[J].電腦知識(shí)與技術(shù),2008,18(2):1 580-1 582.

      [10]陳平,池同柱.ADO.NET數(shù)據(jù)訪問(wèn)模式選擇及優(yōu)化[J].福建電腦,2007(7):80,72.

      猜你喜歡
      優(yōu)化方案
      全站儀在數(shù)字繪圖中測(cè)量方法優(yōu)化方案
      科技資訊(2016年25期)2016-12-27 18:49:50
      大學(xué)周邊健身房滿意度調(diào)查報(bào)告
      證券行業(yè)信息系統(tǒng)安全運(yùn)行問(wèn)題及優(yōu)化
      湖北經(jīng)濟(jì)消費(fèi)結(jié)構(gòu)優(yōu)化研究
      山地光伏電站優(yōu)化方案研究應(yīng)用與建議
      加強(qiáng)施工項(xiàng)目成本管理的思路與對(duì)策
      科技視界(2016年20期)2016-09-29 13:13:20
      新兴县| 石门县| 平舆县| 兴城市| 蓬莱市| 东乡| 乌什县| 涿鹿县| 七台河市| 祁东县| 运城市| 景谷| 柳林县| 扎囊县| 平果县| 涞源县| 北安市| 延寿县| 东辽县| 青田县| 休宁县| 邢台县| 秀山| 都江堰市| 邵东县| 镇沅| 利津县| 贺兰县| 蒲江县| 临泉县| 方正县| 慈利县| 河东区| 时尚| 新津县| 宜川县| 章丘市| 论坛| 南汇区| 会理县| 顺平县|