450 likes | 558 Views
第 8 章 ADO.NET的網頁資料庫操作. 8-1 網頁資料庫的基礎 8-2 建立資料庫與新增 ODBC 8-3 ADO.NET 的基礎 8-4 SQL 指令的資料庫操作 8-5 DataSet 的資料庫操作 8-6 使用參數 SQL 指令的資料庫操作. 8-1 網頁資料庫的基礎. 8-1-1 資料庫系統 8-1-2 建立網頁資料庫. 8-1-1 資料庫系統. 在電腦計算機科學的應用領域,「資料庫」( Database )才是公司行號或家庭電腦化的推手,眾多的出勤管理系統、倉庫管理系統、進銷存系統或小至錄影帶店管理系統,都屬於不同應用的資料庫系統。
E N D
第8章 ADO.NET的網頁資料庫操作 • 8-1 網頁資料庫的基礎 • 8-2 建立資料庫與新增ODBC • 8-3 ADO.NET的基礎 • 8-4 SQL指令的資料庫操作 • 8-5 DataSet的資料庫操作 • 8-6 使用參數SQL指令的資料庫操作
8-1 網頁資料庫的基礎 • 8-1-1 資料庫系統 • 8-1-2 建立網頁資料庫
8-1-1 資料庫系統 • 在電腦計算機科學的應用領域,「資料庫」(Database)才是公司行號或家庭電腦化的推手,眾多的出勤管理系統、倉庫管理系統、進銷存系統或小至錄影帶店管理系統,都屬於不同應用的資料庫系統。 • 資料庫系統本身是一套應用程式,例如:Access、MySQL、SQL Server和Oracle等,資料庫使用者可以使用SQL資料庫語言來儲存和管理所需的資料,事實上,只有複雜的應用系統,程式開發者才需替客戶量身定作所需的資料庫系統。
8-1-2 建立網頁資料庫-說明 • 網頁資料庫是使用資料庫作為網頁內容的資料來源,它是結合Web伺服器和資料庫系統的一種應用程式架構,如下圖所示:
8-1-2 建立網頁資料庫-步驟 • ASP.NET技術建立網頁資料庫的步驟,如下所示: • Step 1:建立網頁內容所需的資料庫,即Access資料庫檔案.mdb,或SQL Server資料庫。 • Step 2:新增伺服器的ODBC資料來源或使用OLEDB或SQL Server的「提供者」(Managed Providers)來連結資料庫。 • Step 3:撰寫ASP.NET程式,使用ADO.NET存取資料庫記錄來產生網頁內容。 • Step 4:啟動瀏覽程式執行與測試ASP.NET程式執行結果。
8-2 建立資料庫與新增ODBC • 8-2-1 建立資料庫 • 8-2-2 新增ODBC系統資料來源
8-2-1 建立資料庫-建立Access資料庫 • Access資料庫Users.mdb擁有Users資料表,欄位說明如下表所示:
8-2-1 建立資料庫-建立SQL Server 2005 Express資料庫 • 在安裝Visual Web Developer同時也安裝SQL Server 2005 Express,在VWD提供相關介面,可以幫助我們建立SQL Server資料庫。
8-2-2 新增ODBC系統資料來源 • ASP.NET程式如果使用ODBC建立資料庫連結,在Web伺服器電腦需要新增「ODBC」(Open DataBase Connectivity)系統資料來源「DSN」(Data Source Name),如下圖:
8-3 ADO.NET的基礎 • 8-3-1 什麼是ADO.NET • 8-3-2 ADO.NET物件模型
8-3-1 什麼是ADO.NET-說明 • ADO.NET是微軟新一代技術,它是「ADO」(ActiveX Data Object)元件的後繼者,目前版本是2.0版。其主要目的是在.NET Framework平台存取資料,簡單的說,ASP.NET是使用ADO.NET來進行資料庫存取。 • ADO.NET的目的是提供一致的物件模型,可以存取和編輯資料來源的資料,換句話說,就是提供一致的資料處理方式,至於資料來源並不限資料庫,幾乎任何資料來源都可以。以ASP.NET的應用來說,ADO.NET的主要功能是存取資料庫,所以ASP.NET使用ADO.NET,一般來說都是為了建立網頁資料庫。
8-3-1 什麼是ADO.NET-名稱空間 • 在ASP.NET程式需要匯入名稱空間來使用ADO.NET類別。主要名稱空間有3個,如下表所示:
8-3-2 ADO.NET物件模型-圖例 • ADO.NET主要類別物件有:Connection、Command、DataReader和DataSet,其物件模型如下圖所示:
8-3-2 ADO.NET物件模型-Connection物件 • Connection物件可以建立與資料來源間的連結,以資料庫來說,Connection物件還負責初始資料庫。Connection物件有兩種:OLE DB是使用OleDbConnection物件,SQL Server是使用SqlConnection物件。 • 換個角度來說,Web伺服器和資料庫系統間本來沒有任何關係,屬於兩套不同的應用程式,透過ODBC或OLE DB可以開啟資料來源的資料庫,Connection物件進一步將ASP.NET程式和資料庫連結起來。
8-3-2 ADO.NET物件模型-Command物件 • Command物件可以對資料來源執行指令,以資料庫來說,就是執行SQL指令。ASP.NET程式可以使用Command物件送出SQL指令來新增、刪除、更新和查詢資料表的記錄。 • 在ASP.NET程式需要先使用Connection物件建立資料庫連結後,才能使用Command物件執行SQL指令,Command物件分為兩種:OLE DB是使用OleDbCommand物件,SQL Server是使用SqlCommand物件。
8-3-2 ADO.NET物件模型-DataReader物件 • ADO.NET的DataReader物件可以從資料來源使用Command物件執行指令,取得「唯讀」(Read-Only)和「只能向前」(Forward-Only)的串流資料,每次只能從資料來源讀取一列資料(即一筆)儲存到記憶體,所以執行效率非常高。 • DataReader物件分為兩種:OLE DB是使用OleDbDataReader物件,SQL Server是使用SqlDataReader物件。
8-3-2 ADO.NET物件模型-DataSet和DataTable物件 • DataSet物件是由DataTable物件組成的集合物件,DataSet物件可代表儲存在記憶體的資料庫,每一個DataTable儲存一個資料表的記錄資料,並且可以設定資料表間的關聯性(Relationship)。 • DataSet和DataTable類別屬於System.Data名稱空間,當ASP.NET程式需要將資料表的記錄資料填入DataTable物件時,我們需要使用DataAdapter類別的方法Fill()將資料表的資料填入DataSet物件。
8-4 SQL指令的資料庫操作 • 8-4-1 SQL指令的資料庫操作 • 8-4-2 插入新記錄 • 8-4-3 更新記錄 • 8-4-4 刪除記錄
8-4-1 SQL指令的資料庫操作-匯入名稱空間 • 在ASP.NET程式可以使用ADO.NET的Command物件來執行SQL指令,程式是使用Connection物件來建立資料庫連結。ASP.NET程式首先匯入所需的名稱空間,如下所示: <%@ Import Namespace="System.Data" %> <%@ Import NameSpace="System.Data.OleDb" %> • 上述名稱空間是使用在非SQL Server的資料庫系統(7.0以上的版本),例如:Access或Oracle。SQL Server建議匯入的名稱空間,如下所示: <%@ Import Namespace="System.Data" %> <%@ Import NameSpace="System.Data.SqlClient" %>
8-4-1 SQL指令的資料庫操作-步驟一:建立和開啟資料庫連結 • ASP.NET程式在匯入名稱空間後,就可以建立Connection物件,如下所示: objCon = New OleDbConnection(strDbCon) • 上述程式碼建立名為objCon的OleDbConnection物件。strDbCon變數是資料來源字串,如下所示: strDbCon="Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & _ Server.Mappath("/Ch08/Users.mdb")
8-4-1 SQL指令的資料庫操作-步驟二:建立Command物件 • 在開啟資料庫連結後,就可以建立Command物件來指定欲執行的SQL指令字串,如下所示: objCmd = New OleDbCommand( _ strSQL, objCon)
8-4-1 SQL指令的資料庫操作-步驟三:執行SQL指令處理資料庫 • 現在ASP.NET程式已經開啟資料庫連結和建立Command物件,接著就可以使用Command物件的ExecuteNonQuery()方法來執行SQL指令,如下所示: count = objCmd.ExecuteNonQuery() • 程式碼的變數count可以取得影響的記錄數,此方法執行SQL指令並不會傳回記錄資料。
8-4-1 SQL指令的資料庫操作-步驟四:關閉資料庫連結 • 在完成資料庫操作後,請記得使用Connection物件的Close()方法關閉資料庫連結。以Connection物件objCon為例,如下所示: objCon.Close()
8-4-2 插入新記錄-SQL指令 • 在ASP.NET程式插入記錄,最重要的部分是建立Command物件執行的SQL指令,插入新記錄的SQL指令字串,如下所示: strSQL="INSERT INTO USERS (name,birthday," & _ "salary,email,username,userpassword) " strSQL = strSQL & "VALUES ('" & name.Text & "'," strSQL = strSQL & "#" & birthday.Text & "#," strSQL = strSQL & salary.Text & ",'" strSQL = strSQL & email.Text & "','" strSQL = strSQL & username.Text & "','" strSQL = strSQL & password.Text & "')"
8-4-2 插入新記錄-注意事項 • 不論欄位或值清單,都是使用逗號「,」分隔。 • 在VALUES的欄位值中,數值不用單引號括起,字元和日期/時間是使用單引號括起,如果是Access資料庫,日期/時間是使用「#」符號括起。 • 欄位清單並不需要和資料表定義的欄位數目或順序相同,只需列出欲插入欄位即可,不過,非NULL值欄位一定要列出,而且括號內的欄位順序必須和VALUES值的順序相同。
8-4-3 更新記錄-SQL指令 • 在ASP.NET程式的SQL指令是以使用者帳號作為更新記錄的條件,更新欄位是UserPassword和Email,SQL指令字串,如下所示: strSQL = "UPDATE USERS SET " strSQL &="UserPassword='" & _ password.Text & "' , " strSQL &="Email='" & email.Text & "'" strSQL &=" WHERE UserName='" & _ username.Text & "'"
8-4-3 更新記錄-注意事項 • WHERE子句是必要元素,如果沒有條件,資料表內所有記錄欄位都會更新。 • 對於更新欄位值,數值不用單引號括起,字元和日期/時間是使用單引號括起,如果是Access資料庫,日期/時間是使用「#」符號括起。
8-4-4 刪除記錄-SQL指令 • 在ASP.NET程式建立SQL指令字串,就可以使用Command物件執行DELETE指令來刪除記錄資料,如下所示: strSQL = _ "DELETE FROM USERS WHERE UserName ='" & _ username.Text & "'"
8-4-4 刪除記錄-注意事項 • WHERE子句是必要元素,如果沒有此條件,資料表內的所有記錄都會刪除掉。 • WHERE條件的比較運算子和Visual Basic 2005語法相類似,能夠使用=、<>、>、<=和>=。 • WHERE條件如果不只一個,需要使用邏輯運算子來連結,如下表所示:
8-5 DataSet的資料庫操作 • 8-5-1 DataSet物件的資料庫操作 • 8-5-2 插入新記錄 • 8-5-3 更新記錄 • 8-5-4 刪除記錄
8-5-1 DataSet物件的資料庫操作-步驟一:建立Connection物件 • ASP.NET程式需要使用Connection物件來建立資料庫連結,如下所示: objCon = New OleDbConnection(strDbCon) • 上述程式碼建立objCon的資料庫連結物件。
8-5-1 DataSet物件的資料庫操作-步驟二:建立DataAdapter和CommandBuilder物件 • 在DataSet物件是使用DataAdapter物件來取得記錄資料,它是DataSet和Connection物件資料來源間的橋樑,可以取得DataSet的記錄資料和更新資料來源的記錄資料。 • DataAdapter類別也擁有2個版本,SQL Server是SqlDataAdapter,以本節為例是使用OLE DB的OleDbDataAdapter,如下所示: strSQL = "SELECT * FROM Users" objDataAdapter= _ New OleDbDataAdapter(strSQL,objCon)
8-5-1 DataSet物件的資料庫操作-步驟二:建立DataAdapter和CommandBuilder物件 • DataAdapter物件提供4個屬性SelectCommand、InsertCommand、DeleteCommand和UpdateCommand,可以分別指定查詢、插入、刪除和更新SQL指令的Command物件,不過,我們並不用自行建立,可以使用CommandBuilder物件來自動幫我們建立SQL指令,如下所示: Dim objCmdBuilder As OleDbCommandBuilder = _ New OleDbCommandBuilder(objDataAdapter)
8-5-1 DataSet物件的資料庫操作-步驟三:建立DataSet物件填入記錄資料 • 現在我們可以建立DataSet物件且執行DataAdapter的SQL查詢指令,將記錄資料填入DataSet,如下所示: objDataSet As DataSet = New DataSet() objDataAdapter.Fill(objDataSet, "Users") • 上述程式碼建立DataSet物件後,使用DataAdpater物件的Fill()方法將SQL指令的查詢結果,填入第1個參數的的DataSet物件。
8-5-1 DataSet物件的資料庫操作-步驟四:在DataTable執行資料庫操作 • DataSet物件的每一個DataTable物件是對應資料庫的一個資料表,當建立好DataSet物件填入記錄資料後,就可以在DataTable物件插入、刪除和更新列物件DataRow,這就是一筆記錄。
8-5-1 DataSet物件的資料庫操作-步驟五:更新資料表的記錄資料 • 在DataTable物件新增、更新或刪除DataRow物件後,因為操作是針對儲存在記憶體的DataSet物件,最後我們還需要更新資料來源的記錄資料,如下所示: count = objDataAdapter.Update( _ objDataSet, "Users")
8-5-1 DataSet物件的資料庫操作-步驟六:關閉資料庫連結 • 最後記得需要關閉資料庫連結,即使用Connection物件的Close()方法,如下所示: objCon.Close()
8-5-2 插入新記錄-建立DataRow物件 • DataSet物件插入新記錄操作是針對DataTable物件,所謂插入記錄就是新增DataRow物件,如下所示: Dim objDataRow As DataRow objDataRow = _ objDataSet.Tables("Users").NewRow() • 接著輸入欄位值,如下所示: objDataRow("name") = name.Text objDataRow("birthday") = birthday.Text ………………… objDataRow("userpassword") = _ password.Text
8-5-2 插入新記錄-新增至DataTable物件 • 最後將DataRow物件新增到DataTable物件,如下所示: objDataSet.Tables("Users").Rows.Add(objDataRow)
8-5-3 更新記錄 • DataSet物件的更新記錄操作,因為擁有更新條件,所以需要使用迴路找尋欲更新記錄後,才能更新記錄資料,如下所示: For Each objDataRow in _ objDataSet.Tables("Users").Rows If objDataRow("UserName") = _ username.Text Then objDataRow("UserPassword") = password.Text objDataRow("Email") = email.Text End If Next
8-5-4 刪除記錄 • 同樣方式,我們可以使用DataSet物件來刪除資料表的記錄,如下所示: For Each objDataRow in _ objDataSet.Tables("Users").Rows If objDataRow("UserName") = _ username.Text Then objDataRow.Delete() End If Next
8-6 使用參數SQL指令的資料庫操作-參數的SQL指令字串 • Command物件如果需要新增Parameter物件的參數,在SQL指令字串也需要新增參數,這是以「@」符號開頭的字串名稱,如下所示: strSQL="INSERT INTO USERS (name,birthday," & _ "salary,email,username,userpassword) " strSQL &="VALUES ( @name, @birthday,@salary, " strSQL &="@email, @username, @password)" • 上述SQL指令字串的@name、@birthday、@salary、@email、@username和@password就是參數。
8-6 使用參數SQL指令的資料庫操作-建立Parameter參數物件 • 接著我們可以使用參數的SQL指令字串來建立Command物件,如下所示: objCmd = _ New OleDbCommand(strSQL, objCon) • 上述程式碼建立Command物件,objCon是Connection物件。
8-6 使用參數SQL指令的資料庫操作-建立Parameter參數物件 • 然後使用Parameters屬性取得ParameterCollection集合物件,使用Add()方法新增參數的Parameter物件,如下所示: objCmd.Parameters.Add(New OleDbParameter( _ "@name", OleDbType.Varchar, 10)) objCmd.Parameters.Add(New OleDbParameter( _ "@birthday", OleDbType.Date)) ……… objCmd.Parameters.Add(New OleDbParameter( _ "@username", OleDbType.Varchar, 10)) objCmd.Parameters.Add(New OleDbParameter( _ "@password", OleDbType.Varchar, 10))
8-6 使用參數SQL指令的資料庫操作-指定參數SQL指令的參數值 • 當Command物件新增ParameterCollection集合物件的參數物件後,在使用Execute()方法執行SQL指令前,就可以指定參數值,如下所示: objCmd.Parameters("@name").Value=name.Text objCmd.Parameters("@birthday").Value= _ birthday.Text objCmd.Parameters("@salary").Value=salary.Text objCmd.Parameters("@email").Value=email.Text objCmd.Parameters("@username").Value= _ username.Text objCmd.Parameters("@password").Value= _ password.Text