1. 程式人生 > >【Asp.net】——ADO.NET介紹

【Asp.net】——ADO.NET介紹

前言

       ADO.NET是對Microsoft ActiveX Data Object(ADO)一個跨時代的改進,它提供了平臺互用性和可伸縮性的資料訪問。由於傳送的資料都是XML格式的,因此任何能夠讀取XML格式的應用程式都可以進行資料處理。事實上,接受資料的元件不一定是ADO.NET元件,它可以是基於一個Microsoft Visual Studio的解決方案,也可以是任何執行在其他平臺上的任何應用程式。

正文

       以前接觸的資料庫訪問,需要一直與資料庫保持連線,直到獲取所有滿足需要的資料之後才會斷開資料庫連線,這種資料庫訪問方式稱之為連線式資料訪問技術。相比於以前的連線式資料訪問技術,ADO.NET除了提供連線式資料訪問技術之外,還提供了另一種斷開式解決方案,那就是在記憶體中模擬一個數據庫,也就是記憶體中的資料庫。

物理資料庫與記憶體資料庫的對比:

通常我們在引用資料庫時要用名詞database來表示(因為建立資料庫的SQL語句是create database),在一個數據庫中可以包含多個表(table)和檢視(view),除此之外還可以包含一些外來鍵關係等。在一個表或者視圖裡可以包含多個列和行。

在ADO.NET中對上面提到的物件都在記憶體中進行了模擬,在記憶體中 的資料庫物件稱為Dataset,一個記憶體中的資料庫可以包含多個在記憶體中的表(DataTable)和記憶體中的檢視(DataView),並且也允許在表存在一些關係(DataRelation)。同時在一個記憶體中的表(Datatable)或者記憶體中的檢視(dataview)中也允許存在行(dataRow)和列(dataColumn)。

物理資料庫與記憶體資料庫之間的各物件的對應關係如下:

 

本篇部落格將總結6個ADO.NET中的常用物件:Connection物件,Command物件,DataReader物件,DataAdapter物件,DataSet物件,Datatable物件,DataRow物件,DataColumn物件,引數化SQL語句,分頁查詢SQL語句。

在ADO.NET也定義了一套用於訪問資料庫的標準,這個標準是以介面(interface)形式提供的,這一套介面是IDbConnection,IDbCommand,IDbDataAdapter和IDataReader,並且還有一套實現這些介面的抽象類,分別是DbConnection,DbCommand,DbDataAdapter和DataReader。

1、Connection物件

Connection物件也稱為資料庫連線物件,Connection物件的功能是負責對資料來源的連線。所有connection物件的基類都是DbConnection類。

connection物件有兩個重要屬性:

  • ConnectionString:表示用於開啟SQL server資料庫的字串;
  • state:表示connection的狀態,有closed和open兩種狀態。

connection物件有倆個重要方法:

  • Open()方法:指示開啟資料庫
  • Close()方法:指示關閉資料庫

連線到資料庫的方式:

  • 如果要連線的資料庫伺服器與開發者的機器在同一個局域網裡,可以使用區域網IP地址或者區域網中的電腦主機名
  • 如果要連線的資料庫伺服器與開發者的機器不在同一個區域網內,那麼就要求資料庫伺服器必須有一個公網IP,我們可以使用公網IP來連線,如果資料庫伺服器還有網際網路域名,那麼用網際網路域名也是可以的。
  • 如果要連線的資料庫伺服器與開發者所使用的機器是同一臺機器,那麼可以使用以下幾種方式之一:“(local)”或者“.”或者“127.0.0.1”

注意:例項化一個connection物件的時候,被例項化的connection物件是關閉的,我們需要Open這個connection物件,執行完畢相關操作之後再關閉這個connection物件。

2、Command物件

Command物件也稱為資料庫命令物件,command物件主要執行包括新增,刪除,修改及查詢資料的操作的命令。也可以用來執行儲存過程。用於執行儲存過程時需要將command物件的commandType屬性設定為commandType.StoredProcedure,預設情況下commandType屬性為commandType.Text,表示執行的是普通的SQL語句。

Command物件主要有三個方法:

  • ExecuteNonQuery():執行一個SQL語句,返回受影響的行數,這個方法主要用於執行對資料庫增加,更新,刪除操作,注意查詢的時候不是呼叫這個方法。
  • ExecuteReader():執行一個查詢的SQL語句,返回一個dataReader物件
  • ExecuteScalar():從資料庫檢索單個值,這個方法主要用於統計操作。

注意:在操作資料庫的時候,為了提高效能,都遵循一個原則:資料庫連線物件應該儘可能晚開啟,儘可能早關閉。在command物件需要執行資料庫操作之前才打開資料庫連線物件,執行資料庫操作之後馬上就關閉了資料庫連線物件。

3、DataReader物件

DataReader物件是一個讀取行的只讀流的方式,繫結資料時比使用資料集方式效能要高,因為他是隻讀的,所以如果要對資料庫中的資料進行修改就需要藉助其他方法將所做的更改儲存到資料庫。

DataReader物件不能直接例項化,必須藉助於相關的command物件來建立例項,例如用SQLcommand的例項的executeReader()方法可以建立SQLdataReader例項。

4、DataAdaper物件

DataAdapter物件也稱為資料介面卡物件,DataAdapter物件利用資料庫連線物件(connection)連線的資料來源,使用資料庫命令物件(command)規定的操作從資料來源中檢索出資料送往資料集物件(dataset),或者將資料集中經過編輯後的資料送回資料來源。

注意:一個數據集中可以放置多張資料表。但是每個資料介面卡只能夠對應於一張資料表。

5、DataSet物件

dataset物件也稱為資料集物件,dataset物件用於表示那些儲存在記憶體中的資料,它相當於一個記憶體中的資料庫,它可以包括多個Datatable物件以及dataview物件。dataset主要用於管理儲存在記憶體中的資料以及對資料的斷開操作。

由於dataset物件提供了一個離線的資料來源,這樣就減輕了資料庫以及網路的負擔,在設計程式的時候可以將dataset物件作為程式的資料來源。

6、Datatable物件

Datatable是ADO.NET庫中的核心物件,就像普通的資料庫中的表一樣,它也有行和列,它主要包括datarow和dataColumn,分別代表行和列。

(1)資料行(datarow)

 

(2)資料列(datacolumn)

 

7、引數化SQL語句

避免SQL注入的方法有兩種:

  • 一是所有的SQL語句都存放在儲存過程中,這樣不但可以避免SQL注入,還能提高效能,並且儲存過程可以由專門的資料庫管理員編寫和集中管理,不過這種做法有時候針對相同的幾個表有不同條件的查詢,SQL語句可能不同,這樣就會編寫大量的儲存過程。
  • 二是引數化SQL語句。

在引數化SQL語句中將數值以引數化的形式提供:

select * from UserInfo where [email protected]

 

8、分頁查詢SQL語句

分頁查詢就是根據需要每次只返回所需要的資料,而不用每次都從資料庫中全部把資料提取出來,這樣可以降低程式與資料庫之間的資料傳送量,並且還可以提高程式的效能。

一般情況下我們在資料量大的時候總是會分頁顯示(誰也不會一下子將幾萬條資料全部一次性顯示給使用者),這樣決定我們返回的查詢結果集的引數有兩個:當前顯示的頁數pageIndex和每頁顯示的記錄條數size。

例如,如果每頁顯示5條記錄,那麼第n頁顯示的資料記錄的公式為:

select top 5 * from UserInfo where UserId not in (select top(n-1)*5 UserId from UserInfo order by UserId asc) order by UserId asc