13
6-2 ASP.NET 網頁設計與 C# ADO.NET 簡介 ADO.NET 是微軟.NET 平台所提供的新世代資料存取技術, ADO.NET 的原文 ActiveX Data Objects for the .NET Framework (ADO.NET) ;而 ADO.NET 包含在.NET Framework 之中,可以透過 ADO.NET 的資料存取技術來存取包 括資料庫、XML 和應用程式的資料。所以本章將會利用到 SQL 四個基本語 法搭配 ADO.NET 的技術,透過程式去執行資料庫的查詢、新增、修改與刪 除的動作。 ADO.NET 資料庫存取技術 6-1 6-2 在使用 ADO.NET 技術來取存資料庫時,有兩種方式可以選擇(表 6-1)。 方式 說明 精靈化 凡是以精靈設定方式完成資料庫的存取動作,都可歸類到【精靈化】方式這 個範疇。就是以【工具箱】的【資料】中的 SqlDataAdapter 資料配接器組態精 靈,以精靈化的選擇設定方式,以拖曳及設定的方式完成。此方式優點是快 速簡單。 程式化 凡是以程式化的方式撰寫一切所需的資料庫存取程式碼,都可歸類到【程式 化】方式這個範疇。就是完全以程式設計的方式完成,從建立資料庫連線、 選擇資料配接器或直接資料庫存取、把資料填入 DataSet 等等,一直到完成資 料存取目的,全部透過程式設計師一行一行的編寫,此方式優點是彈性高及 功能強大。 6-1 ADO.NET 取存方式 上面兩個方式是筆者對於 ADO.NET 存取方式的分類,之所以區分這兩種方 式的原因,是因為 ADO.NET 的技術在剛開始學習入門時,由於初學者先天 對於 C#.NET 的基本語法就不太熟,後天加上對資料庫運作的原理方式又不 是很懂,所以有蠻多初學者對於如何以 ADO.NET 技術來對資料庫做存取產 生的很大的障礙。在此給各位讀者一個建議,請多加練習第四章 DataGrid 制項與資料庫查詢動作,反覆熟練,對於資料庫連線的程序及概念會愈來愈 清楚,一直到可以用【程式化】方式寫出【精靈化】方式所做的一切動作, 這時對 ADO.NET 資料庫的操作存取才可以說是成功了。

6-1 ADO.NET 簡介 - epaper.gotop.com.twepaper.gotop.com.tw/pdf/ACL018900.pdf · 6-2 ! ASP.NET 網頁設計與 C# ADO.NET 簡介 ADO.NET 是微軟.NET 平台所提供的新世代資料存取技術,ADO.NET

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 6-1 ADO.NET 簡介 - epaper.gotop.com.twepaper.gotop.com.tw/pdf/ACL018900.pdf · 6-2 ! ASP.NET 網頁設計與 C# ADO.NET 簡介 ADO.NET 是微軟.NET 平台所提供的新世代資料存取技術,ADO.NET

!

ASP.NET網頁設計與 C#

ADO.NET簡介 ADO.NET是微軟.NET平台所提供的新世代資料存取技術,ADO.NET的原文是 ActiveX Data Objects for the .NET Framework (ADO.NET);而 ADO.NET是包含在.NET Framework之中,可以透過 ADO.NET的資料存取技術來存取包括資料庫、XML 和應用程式的資料。所以本章將會利用到 SQL 四個基本語法搭配 ADO.NET 的技術,透過程式去執行資料庫的查詢、新增、修改與刪除的動作。

ADO.NET資料庫存取技術

6-1

6-2 在使用 ADO.NET技術來取存資料庫時,有兩種方式可以選擇(表 6-1)。

方式 說明

精靈化

凡是以精靈設定方式完成資料庫的存取動作,都可歸類到【精靈化】方式這

個範疇。就是以【工具箱】的【資料】中的 SqlDataAdapter 資料配接器組態精靈,以精靈化的選擇設定方式,以拖曳及設定的方式完成。此方式優點是快

速簡單。

6-2

程式化

凡是以程式化的方式撰寫一切所需的資料庫存取程式碼,都

化】方式這個範疇。就是完全以程式設計的方式完成,從建

選擇資料配接器或直接資料庫存取、把資料填入 DataSet等等料存取目的,全部透過程式設計師一行一行的編寫,此方式

功能強大。

表 6-1:ADO.NET 取存方式

上面兩個方式是筆者對於 ADO.NET 存取方式的分類,之所以式的原因,是因為 ADO.NET 的技術在剛開始學習入門時,由對於 C#.NET 的基本語法就不太熟,後天加上對資料庫運作的是很懂,所以有蠻多初學者對於如何以 ADO.NET 技術來對資生的很大的障礙。在此給各位讀者一個建議,請多加練習第四

制項與資料庫查詢動作,反覆熟練,對於資料庫連線的程序及

清楚,一直到可以用【程式化】方式寫出【精靈化】方式所做

這時對 ADO.NET資料庫的操作存取才可以說是成功了。

可歸類到【程式

立資料庫連線、

,一直到完成資

優點是彈性高及

區分這兩種方

於初學者先天

原理方式又不

料庫做存取產

章 DataGrid控概念會愈來愈

的一切動作,

Page 2: 6-1 ADO.NET 簡介 - epaper.gotop.com.twepaper.gotop.com.tw/pdf/ACL018900.pdf · 6-2 ! ASP.NET 網頁設計與 C# ADO.NET 簡介 ADO.NET 是微軟.NET 平台所提供的新世代資料存取技術,ADO.NET

I 6 IASP.NET資料庫存取技術

資料庫讀寫應用實例 接下來的例子將示範如何以 ADO.NET 程式完成對資料庫的查詢、新增、修改與刪除,而對資料庫存取動作其 SQL語法有分固定語法與帶參數語法兩種(表 6-2)。

語法

6-3

說明

固定語法 所謂的固定語法是 SQL語法中所有的項目與條件式都是固定的,也就是很明確指定 where條件式的條件。

帶參數語法 帶參數語法就是不把 SQL語法的欄位值寫死,只是預留一個定義,留待後面以程式的方式來動態將欄位值傳入,這種做法是最有彈性的,也比

較能符合現實世界的需求。

表 6-2:SQL 料庫存取語法

6-3-1 固定語法

而固定語法又分為二種,一種是單純的查詢(select),另一種是對資料庫做異動( insert、 update 與 delete),然而差異也只有 ExecuteReader()與ExecuteNonQuery()這兩個方法的區別了。

型態 語法

Select

SqlConnection conn=new SqlConnection("data source=localhost;initial catalog=myDB;user id=sa;password=12345");

conn.Open();

SqlCommand cmd=new SqlCommand("select陳述式",conn);

SqlDataReader dr=cmd.ExecuteReader();

SqlConnection conn=new SqlConnection("data source=localhost;initial catalog=myDB;user id=sa;password=12345");

conn.Open();

SqlCommand cmd=new SqlCommand("SQL陳述式 ",conn);

cmd.ExecuteNonQuery();

Insert

Update

Delete

表 6-3:ADO.NET 固定語法

6-3

Page 3: 6-1 ADO.NET 簡介 - epaper.gotop.com.twepaper.gotop.com.tw/pdf/ACL018900.pdf · 6-2 ! ASP.NET 網頁設計與 C# ADO.NET 簡介 ADO.NET 是微軟.NET 平台所提供的新世代資料存取技術,ADO.NET

6-4

!

ASP.NET網頁設計與 C#

! 程式說明:

! SqlConnection

SqlConnection 是用來建立資料庫連線,而 SqlConnection conn=new SqlConnection(字串)這種型式是物件導向的一種寫法,表示 conn 是繼承SqlConnection這個類別,conn繼承 SqlConnection這個類別後就具有資料庫連線所需的種種設定,而 new則是表示初始化 conn這個物件,並為其配置記憶體,關於物件導向方面的知識,在後面會有專門的章節來討論。

而字串 "data source=localhost;initial catalog=myDB;user id=sa;password =12345"含有四個參數設定,其作用是作資料庫連線所需的資訊,說明如下:

# data source=localhost是指定來源 SQL Server伺服器的位置,如果是本機的話則用 localhost或是一個點「.」的符號來表示;另外也可用 IP或是主機名稱來指定。

# initial catalog=myDB是指定要使用這個 SQL Server中的哪一個資料庫,而 myDB是我們之前所建立的一個資料庫。

# user id是指定與 SQL Server連線所使用的帳號,在此是以 sa帳號來做登入,但在 SQL Server 中 sa 帳號擁有最大權限,為了教學方便故使用 sa 帳號,在正式環境請另建一個帳號來替代,否則權限太大會有安全上的問題。

# password則是 user id所指定帳號的密碼。

! conn.open()

conn.open()則表示是將 conn 資料庫連線正式開啟,若只有定義SqlConnection而沒有開啟,是無法從這個連線讀到任何資料的。

! SqlCommand

SqlCommand 是下達 SQL 語法或預儲程序(store procedure)的用途,可以將 SQL 語法定義在 SqlCommand(字串,conn)的字串中,而字串後面接的conn就是指定要使用這個連線來執行 SQL 語法,連線是一定要指定的,否則電腦會不知要使用哪個連線。

! SqlDataReader

SqlDataReader稱之為資料讀取器,其用於讀取資料,也就是 SqlCommand中若使用 select讀取資料的 SQL語法就要搭配 SqlDataReader。

Page 4: 6-1 ADO.NET 簡介 - epaper.gotop.com.twepaper.gotop.com.tw/pdf/ACL018900.pdf · 6-2 ! ASP.NET 網頁設計與 C# ADO.NET 簡介 ADO.NET 是微軟.NET 平台所提供的新世代資料存取技術,ADO.NET

6-5

ASP.NET資料庫存取技術 I 6 I

! ExecuteReader()

如果SqlCommand中使用的是 select的SQL語法,就要搭配ExecuteReader()這個方法來使用,ExecuteReader是由 Execute與 Reader二個單字所組成,前者是執行,後者是讀取器的意思,顧名思義 select 的 SQL 語法當然要和ExecuteReader()來做配對。

! ExecuteNonQuery()

當您使用 insert、update或 delete時,請和 ExecuteNonQuery()做搭配,其NonQuery意思是非查詢,那除了 select叫做查詢外,其他三個就是非查詢,所以 ExecuteNonQuery()是和 insert、update或 delete來做搭配。

! 對於 ExecuteReader()和 ExecuteNonQuery()搭配使用時機請務必弄清楚,否則執行 SQL命令時會產生錯誤。

只要知道每行程式是做什麼用的就可以了,不必將解說細節一一背起來,倒

是固定語法一定要記起來,因為這就是 ASP.NET資料庫的核心程式所在,所有的應用幾乎都是以這個資料庫存取語法做應用變化。

範例 6-1:以 Select查詢資料庫資料

本範例要利用 Select 語法,透過 ADO.NET 技術從資料庫讀取資料,並以DataGrid控制項將資料顯示出來。

! 步驟一:新增專案

請在 VS.NET 開發工具中新增一個專案,選擇 ASP.NET WEB應用程式,並命名為 VC6-1。

! 步驟二:版面配置

1. 如圖 6-1所示,從【工具箱】中拖曳進一個 DataGrid控制項,並拖放到適當位置。

Page 5: 6-1 ADO.NET 簡介 - epaper.gotop.com.twepaper.gotop.com.tw/pdf/ACL018900.pdf · 6-2 ! ASP.NET 網頁設計與 C# ADO.NET 簡介 ADO.NET 是微軟.NET 平台所提供的新世代資料存取技術,ADO.NET

6-6

!

ASP.NET網頁設計與 C#

圖 6-1:拖曳控制項

2. 調整 DataGrid控制項的大小及位置,如圖 6-2。

圖 6-2:設定 DataGrid 控制項

Page 6: 6-1 ADO.NET 簡介 - epaper.gotop.com.twepaper.gotop.com.tw/pdf/ACL018900.pdf · 6-2 ! ASP.NET 網頁設計與 C# ADO.NET 簡介 ADO.NET 是微軟.NET 平台所提供的新世代資料存取技術,ADO.NET

I 6 IASP.NET資料庫存取技術

3. 設定 DataGrid控制項的格式化 請點選 DataGrid 控制項,再點選【屬性視窗】下面的【自動格式化】,選擇您想要的格式來美化 DataGrid,然後按【確定】按鈕結束,DataGrid 控制項就會有個美麗的外觀(圖 6-3)。

圖 6-3:DataGrid 控制項的格式化

! 步驟三:建立程式碼

請點選【方案總管】視窗中的 WebForm1.aspx 程式,按滑鼠右鍵選取【檢視程式碼】(圖 6-4)。

6-7

Page 7: 6-1 ADO.NET 簡介 - epaper.gotop.com.twepaper.gotop.com.tw/pdf/ACL018900.pdf · 6-2 ! ASP.NET 網頁設計與 C# ADO.NET 簡介 ADO.NET 是微軟.NET 平台所提供的新世代資料存取技術,ADO.NET

6-8

!

ASP.NET網頁設計與 C#

圖 6-4:檢視程式碼

之後會出現一個 WebForm1.aspx.cs的程式碼後置檔案(圖 6-5)。

圖 6-5:程式碼後置檔案

Page 8: 6-1 ADO.NET 簡介 - epaper.gotop.com.twepaper.gotop.com.tw/pdf/ACL018900.pdf · 6-2 ! ASP.NET 網頁設計與 C# ADO.NET 簡介 ADO.NET 是微軟.NET 平台所提供的新世代資料存取技術,ADO.NET

I 6 IASP.NET資料庫存取技術

1. 先加入 using System.Data.SqlClient;命名空間,此段程式碼是手動寫 SQL Server資料庫連線會用到的命名空間。

2. 這裡要在程式載入時,自動執行資料庫讀取及 DataGrid 顯示資料,請在

Page_Load程式區塊內加入程式碼,程式碼如下:

private void Page_Load(object sender, System.EventArgs e) { //以 SqlDataReader dr來讀取㈾料 SqlConnection conn=new SqlConnection("data source=localhost;initial catalog=myDB;user id=sa;password=12345"); conn.Open(); SqlCommand cmd=new SqlCommand("select * from product",conn); SqlDataReader dr=cmd.ExecuteReader(); //以 DataGrid來顯示 SqlDataReader dr的㈾料 DataGrid1.DataSource=dr; DataGrid1.DataBind(); }

! 程式說明:

! 有的讀者可能會問:為何須要先加入「using System.Data.SqlClient; 」這行程式碼?這是因為要告訴.NET 系統,程式所要連線的資料庫為 MS SQL Server資料庫。然而為何.NET 不事先替使用者做好這一段的設定呢?是因為資料庫有許多種類,如 SQL Server、Access、Oracle、DB2、MySQL等等,然而 VS.NET 並不知道您會使用哪一種的資料庫,所以就留給使用者來自行做決定

! 在 4-2-5節時就曾約略介紹了 DataGrid這個控制項,當中曾提及 DataGrid的資料來源常見的有兩種,一是 DataSet(前面章節已介紹過了),另一是SqlDataReader,也就是這個範例所使用到的技術, 將 DataGrid資料來源屬性 DataSource設定為 SqlDataReader的物件,最後再做個 DataBind(),就能夠將資料顯現在 DataGrid控制項上了。

6-9

Page 9: 6-1 ADO.NET 簡介 - epaper.gotop.com.twepaper.gotop.com.tw/pdf/ACL018900.pdf · 6-2 ! ASP.NET 網頁設計與 C# ADO.NET 簡介 ADO.NET 是微軟.NET 平台所提供的新世代資料存取技術,ADO.NET

6-10

!

ASP.NET網頁設計與 C#

! 執行畫面說明:

請在【VC6-1】專案上按滑鼠右鍵執行【建置】,以編譯檢查程式是否正確。若無錯誤產生則按【F5】開始執行程式,圖 6-6 畫面會呈現一個以 DataGrid控制項來顯示的資料查詢結果。

圖 6-6:執行結果畫面

範例 6-2:以 Insert新增資料庫記錄

本範例要利用 Insert語法,透過 ADO.NET技術在資料庫中新增一筆記錄,並以 DataGrid控制項將結果顯示出來。

! 步驟一:新增專案

請在 VS.NET 開發工具中新增一個專案,選擇 ASP.NET WEB應用程式,並命名為 VC6-2。

! 步驟二:版面配置

1. 如圖 6-7所示,從【工具箱】拖曳進一個 DataGrid控制項。

Page 10: 6-1 ADO.NET 簡介 - epaper.gotop.com.twepaper.gotop.com.tw/pdf/ACL018900.pdf · 6-2 ! ASP.NET 網頁設計與 C# ADO.NET 簡介 ADO.NET 是微軟.NET 平台所提供的新世代資料存取技術,ADO.NET

I 6 IASP.NET資料庫存取技術

圖 6-7:拖曳控制項

2. 調整 DataGrid控制項的大小及位置,如圖 6-8。

圖 6-8:設定 DataGrid 控制項

6-11

Page 11: 6-1 ADO.NET 簡介 - epaper.gotop.com.twepaper.gotop.com.tw/pdf/ACL018900.pdf · 6-2 ! ASP.NET 網頁設計與 C# ADO.NET 簡介 ADO.NET 是微軟.NET 平台所提供的新世代資料存取技術,ADO.NET

6-12

!

ASP.NET網頁設計與 C#

3. 設定 DataGrid控制項的格式化 請點選 DataGrid 控制項,再點選【屬性視窗】下面的【自動格式化】,選擇任一格式來美化 DataGrid,然後按【確定】按鈕結束(圖 6-9)。

圖 6-9:DataGrid 控制項的格式化

! 步驟三:建立程式碼

請點選【方案總管】視窗中的 WebForm1.aspx 程式,按滑鼠右鍵選取【檢視程式碼】(圖 6-10)。

Page 12: 6-1 ADO.NET 簡介 - epaper.gotop.com.twepaper.gotop.com.tw/pdf/ACL018900.pdf · 6-2 ! ASP.NET 網頁設計與 C# ADO.NET 簡介 ADO.NET 是微軟.NET 平台所提供的新世代資料存取技術,ADO.NET

I 6 IASP.NET資料庫存取技術

圖 6-10:檢視程式碼

之後會出現一個 WebForm1.aspx.cs的程式碼後置檔案(圖 6-11)。

圖 6-11:程式碼後置檔案

6-13

Page 13: 6-1 ADO.NET 簡介 - epaper.gotop.com.twepaper.gotop.com.tw/pdf/ACL018900.pdf · 6-2 ! ASP.NET 網頁設計與 C# ADO.NET 簡介 ADO.NET 是微軟.NET 平台所提供的新世代資料存取技術,ADO.NET

6-14

!

ASP.NET網頁設計與 C#

1. 先加入 using System.Data.SqlClient;命名空間,這是手動寫 SQL Server資料庫連線會用到的。

2. 這裡要在程式載入時,自動執行資料記錄的新增,接著並以 DataGrid來顯示新的資料記錄,請在 Page_Load程式區塊內加入程式碼,程式碼如下:

private void Page_Load(object sender, System.EventArgs e) { //新增㆒筆記錄 SqlConnection conn1=new SqlConnection("data source=localhost; initial catalog=myDB;user id=sa;password=12345"); conn1.Open(); SqlCommand cmd1=new SqlCommand("insert into product ProductID,ProductName,Quantity,Price) values ('M001','芒果汁' ,100,25)",conn1); cmd1.ExecuteNonQuery(); //以 DataGrid來顯示 SqlConnection conn2=new SqlConnection("data source=localhost; initial catalog=myDB;user id=sa;password=12345"); conn2.Open(); SqlCommand cmd2=new SqlCommand("select * from product",conn2); SqlDataReader dr=cmd2.ExecuteReader(); DataGrid1.DataSource=dr; DataGrid1.DataBind(); }