!ASP.
NET網頁設計與C#
6-1ADO.NET簡介
ADO.NET是微軟.NET平台所提供的新世代資料存取技術,ADO.NET的原文是ActiveXDataObjectsforthe.NETFramework(ADO.NET);而ADO.NET是包含在.NETFramework之中,可以透過ADO.NET的資料存取技術來存取包括資料庫、XML和應用程式的資料。所以本章將會利用到SQL四個基本語法搭配ADO.NET的技術,透過程式去執行資料庫的查詢、新增、修改與刪除的動作。
6-2ADO.NET資料庫存取技術
在使用ADO.NET技術來取存資料庫時,有兩種方式可以選擇(表6-1)。
方式說明
凡是以精靈設定方式完成資料庫的存取動作,都可歸類到【精靈化】方式這個範疇。就是以【工具箱】的【資料】中的SqlDataAdapter資料配接器組態精靈,以精靈化的選擇設定方式,以拖曳及設定的方式完成。此方式優點是快速簡單。凡是以程式化的方式撰寫一切所需的資料庫存取程式碼,都可歸類到【程式化】方式這個範疇。就是完全以程式設計的方式完成,從建立資料庫連線、選擇資料配接器或直接資料庫存取、把資料填入DataSet等等,一直到完成資料存取目的,全部透過程式設計師一行一行的編寫,此方式優點是彈性高及功能強大。
精靈化
程式化
表6-1:ADO.NET取存方式
上面兩個方式是筆者對於ADO.NET存取方式的分類,之所以區分這兩種方式的原因,是因為ADO.NET的技術在剛開始學習入門時,由於初學者先天對於C#.NET的基本語法就不太熟,後天加上對資料庫運作的原理方式又不是很懂,所以有蠻多初學者對於如何以ADO.NET技術來對資料庫做存取產生的很大的障礙。在此給各位讀者一個建議,請多加練習第四章DataGrid控制項與資料庫查詢動作,反覆熟練,對於資料庫連線的
程序及概念會愈來愈清楚,一直到可以用【程式化】方式寫出【精靈化】方式所做的一切動作,這時對ADO.NET資料庫的操作存取才可以說是成功了。
6-2
ASP.NET資料庫存取技術I
6
I
6-3資料庫讀寫應用實例
接下來的例子將示範如何以ADO.NET程式完成對資料庫的查詢、新增、修改與刪除,而對資料庫存取動作其SQL語法有分固定語法與帶參數語法兩種(表6-2)。
語法
固定語法
說明
所謂的固定語法是SQL語法中所有的項目與條件式都是固定的,也就是很明確指定where條件式的條件。帶參數語法就是不把SQL語法的欄位值寫死,只是預留一個定義,留待後面以程式的方式來動態將欄位值傳入,這種做法是最有彈性的,也比較能符合現實世界的需求。
帶參數語法
表6-2:SQL料庫存取語法
6-3-1
固定語法
而固定語法又分為二種,一種是單純的查詢(select),另一種是對資料庫做異動(insert、update與delete),然而差異也只有ExecuteReader()與ExecuteNonQuery()這兩個方法的區別了。
型態
SqlConnectionconn.Open();SqlCommandcmd=newSqlCommand("select陳述式",conn);SqlDataReaderdr=cmd.ExecuteReader();SqlConnectionInsertUpdateDeleteconn.Open();SqlCommandcmd=newSqlCommand("SQL陳述式",conn);cmd.ExecuteNonQuery();conn=newSqlConnection("datasource=localhost;initialcatalog=myDB;userid=sa;pass
word=12345");conn=newid=sa;password=12345");Select
語法
SqlConnection("datasource=localhost;initialcatalog=myDB;user
表6-3:ADO.NET固定語法
6-3
!ASP.NET網頁設計與C#
!程式說明:
!SqlConnectionSqlConnection是用來建立資料庫連線,而SqlConnectionconn=newSqlConnection(字串)這種型式是物件導向的一種寫法,表示conn是繼承SqlConnection這個類別,conn繼承SqlConnection這個類別後就具有資料庫連線所需的種種設定,而new則是表示初始化conn這個物件,並為其配置記憶體,關於物件導向方面的知識,在後面會有專門的章節來討論。而字串"datasource=localhost;initialcatalog=myDB;userid=sa;password=12345"含有四個參數設定,其作用是作資料庫連線所需的資訊,說明如下:#datasource=localhost是指定來源SQLServer伺服器的位置,如果是本機的話則用localhost或是一個點「.」的符號來表示;另外也可用IP或是主機名稱來指定。#initialcatalog=myDB是指定要使用這個SQLServer中的哪一個資料庫,而myDB是我們之前所建立的一個資料庫。#userid是指定與SQLServer連線所使用的帳號,在此是以sa帳號來做登入,但在SQLServer中sa帳號擁有最大權限,為了教學方便故使用sa帳號,在正式環境請另建一個帳號來替代,否則權限太大會有安全上的問題。#password則是userid所指定帳號的密碼。!conn.open()conn.open()則表示是將conn資料庫連線正式開啟,若只有定義SqlConnection而沒有開啟,是無法從這個連線讀到任何資料的。!SqlCommandSqlCommand是下達SQL語法或預儲程序(storeprocedure)的用途,可以將SQL語法定義在SqlCommand(字串,conn)的字串中,而字串後面接的conn就是指定要使用這個連線來執行SQL語法,連線是一定要指定的,否則電腦會不知要使用哪個連線。!SqlDataReaderSqlDataReader稱之為資料讀取器,其用於讀取資料,也就是SqlCommand中若使用select讀取資料的SQL語法就要搭配SqlDataReader。