380 likes | 494 Views
第 13 章 ADO.NET建立網頁資料庫. 13-1 網頁資料庫的基礎 13-2 建立資料庫連接 13-3 ADO.NET 的 DataReader 物件. 13-1 網頁資料庫的基礎. 13-1-1 資料庫系統 13-1-2 ASP.NET 與資料庫 13-1-3 ADO.NET 的簡介 13-1-4 如何建立 ASP.NET 網頁資料庫. 13-1-1 資料庫系統 - 說明. 資料庫系統本身就是一套應用程式,目前的主流是關聯式資料庫系統,例如: Access 、 MySQL 、 SQL Server 和 Oracle 等。
E N D
第13章 ADO.NET建立網頁資料庫 • 13-1 網頁資料庫的基礎 • 13-2 建立資料庫連接 • 13-3 ADO.NET的DataReader物件
13-1 網頁資料庫的基礎 • 13-1-1 資料庫系統 • 13-1-2 ASP.NET與資料庫 • 13-1-3 ADO.NET的簡介 • 13-1-4 如何建立ASP.NET 網頁資料庫
13-1-1 資料庫系統-說明 • 資料庫系統本身就是一套應用程式,目前的主流是關聯式資料庫系統,例如:Access、MySQL、SQL Server和Oracle等。 • 可以使用SQL資料庫語言來儲存和管理所需資料。
13-1-1 資料庫系統-資料庫的組成:資料表、記錄與欄位1
13-1-1 資料庫系統-資料庫的組成:資料表、記錄與欄位2 • 資料表可以使用「索引」(Index)將資料系統化的整理,以便在大量資料中快速找到所需的資料或進行排序。 • 例如:在通訊錄資料表使用編號欄位建立主索引鍵,或稱為「主鍵」(Primary Key),如此就可以透過編號來加速資料表記錄的搜尋和排序。
13-1-2 ASP.NET與資料庫 • 網頁資料庫是一種結合前端HTML文件或Web表單的使用介面,配合後端Web伺服器和資料庫系統的一種應用程式架構,如下圖所示:
13-1-3 ADO.NET的簡介 • ADO.NET是是「ADO」(ActiveX Data Object)元件的後繼者,其主要目的是在.NET Framework平台存取資料。 • 以ASP.NET來說,ADO.NET的主要功能是存取資料庫,所以ASP.NET使用ADO.NET,一般來說都是為了建立網頁資料庫。
13-1-4 如何建立ASP.NET網頁資料庫 • ASP.NET配合ADO.NET建立網頁資料庫的步驟,如下所示: • 建立資料庫 • 建立資料庫連接:使用ADO.NET的OLE DB提供者來建立資料庫連接。 • 存取資料庫:使用ADO.NET的DataReader或DataSet來存取資料庫的記錄資料。 • 執行網頁資料庫:啟動瀏覽程式執行ASP.NET程式,以便測試網頁資料庫的執行結果。
13-2 建立資料庫連接 • 13-2-1 ADO.NET的名稱空間 • 13-2-2 建立Connection物件
13-2-1 ADO.NET的名稱空間 • ASP.NET程式需要匯入指定的名稱空間,才能使用ADO.NET類別來存取資料庫。
13-2-2 建立Connection物件-說明 • Connection物件可以建立ASP.NET程式與存取資料來源的連結和初始資料庫。 • Connection物件有兩種: • OLE DB是使用OleDbConnection物件。 • SQL Server是使用SqlConnection物件。
13-2-2 建立Connection物件-匯入名稱空間 • 在ASP.NET程式需要匯入所需名稱空間,才能使用ADO.NET的類別和物件,如下所示: <%@ Import Namespace="System.Data" %> <%@ Import NameSpace="System.Data.OleDb" %> • SQL Server與SQL Server Express匯入的名稱空間: <%@ Import Namespace="System.Data" %> <%@ Import NameSpace="System.Data.SqlClient" %>
13-2-2 建立Connection物件-步驟一:建立Connection物件1 • 在ASP.NET程式建立Connection物件,就是宣告和建立OleDbConnection物件變數objCon,如下所示: OleDbConnection objCon = new OleDbConnection(strDbCon); • 程式碼使用new運算子建立名為objCon的OleDbConnection物件,strDbCon變數是資料來源字串,如下所示: string strDbCon="Provider=Microsoft.Jet.OLEDB.4.0;“ + "Data Source=" + Server.MapPath("iPods.mdb");
13-2-2 建立Connection物件-步驟一:建立Connection物件2 • 連接SQL Server與SQL Server Express資料庫的SqlConnection物件,如下所示: strDbCon = "server=localhost;database=iPods;uid=sa;pwd=1234"; SqlConnection objCon = new SqlConnection(strDbCon); • 另一種寫法,如下所示: strDbCon="user id=sa;password=1234; ;" + "initial catalog=iPods;" + "data source=localhost";
13-2-2 建立Connection物件-步驟一:建立Connection物件3 • 至於SQL Server 2005 Express的連接字串,如下所示: strDbCon="Data Source=.\SQLEXPRESS;AttachDbFilename=" + Server.MapPath("iPods.mdf") + ";Integrated Security=True;" + "TrustServerCertificate=False;" + "User Instance=True;Context Connection=False"; • 上述連接字串的Data Source屬性是.\SQLEXPRESS,AttachDbFilename屬性是資料庫名稱,副檔名是.mdf。
13-2-2 建立Connection物件-步驟二:開啟資料庫連接 • 在建立好Connection物件後,就可以使用Open()方法開啟資料庫連接,如下所示; objCon.Open(); • 上述程式碼使用名為objCon的Connection物件來開啟資料庫連接。
13-2-2 建立Connection物件-步驟三:資料庫操作與查詢 • 在建立好Connection資料庫連接物件後,就可以使用State屬性檢查目前資料庫的連接狀態,如下所示: if (objCon.State == ConnectionState.Open) { Response.Write("<b>目前為開啟狀態</b><br/>"); } else { Response.Write("<b>目前為關閉狀態</b><br/>"); }
13-2-2 建立Connection物件-步驟四:關閉資料庫連接 • 在完成資料庫操作後,請使用Connection物件的Close()方法關閉資料庫連接。以Connection物件objCon為例,如下所示: objCon.Close();
13-3 ADO.NET的DataReader物件 • 13-3-1 Command與DataReader物件 • 13-3-2 開啟DataReader物件 • 13-3-3 取得記錄的欄位名稱與值 • 13-3-4 使用表格顯示資料表
13-3 ADO.NET的DataReader物件 • ASP.NET網頁資料庫就是使用ADO.NET的DataReader或DataSet物件來取得記錄資料,本節將說明如何用Command物件執行SQL指令來取得DataReader物件的資料表記錄。
13-3-1 Command與DataReader物件-Command物件 • Command物件可以針對資料來源執行SQL指令,我們可以使用Command物件送出SQL指令來新增、刪除、更新和查詢資料表的記錄。 • ASP.NET程式需要先使用Connection物件建立和開啟資料庫連接後,才能使用Command物件執行SQL指令。 • Command物件分為兩種 • OLE DB使用OleDbCommand物件 • SQL Server使用SqlCommand物件。
13-3-1 Command與DataReader物件-DataReader物件 • DataReader物件是執行SQL指令傳回的記錄資料,這是「唯讀」(Read-Only)和「只能向前」(Forward-Only)的串流資料。因其每次只會從資料來源讀取一列資料(即一筆)儲存到記憶體,所以讀取資料的執行效率非常高。 • DataReader物件也分為兩種 • OLE DB使用OleDbDataReader物件 • SQL Server使用SqlDataReader物件
13-3-2 開啟DataReader物件-步驟一:開啟Connection物件的資料庫連接 • ASP.NET程式建立DataReader物件需要使用Connection物件開啟資料庫連接: OleDbConnection objCon = new OleDbConnection(strDbCon); objCon.Open(); • 上述程式碼建立objCon的Connection物件後,使用Open()方法開啟資料庫連接。
13-3-2 開啟DataReader物件-步驟二:建立Command物件 • 在建立好Connection物件後,就可以使用SQL指令和Connection物件作為參數來建立Command物件,如下所示: string strSQL = "SELECT * FROM iPod"; OleDbCommand objCmd = new OleDbCommand(strSQL, objCon); • 上述程式碼使用new運算子建立Command物件,第2個參數是開啟的Connection物件,表示向此資料來源執行第1個參數的SQL指令。
13-3-2 開啟DataReader物件-步驟三:執行SQL指令查詢資料表 • 接著使用Command物件的ExecuteReader()方法執行SQL查詢指令,如下所示: OleDbDataReader objDataReader = objCmd.ExecuteReader(); • 上述程式碼取得DataReader物件objDataReader,讀者可以想像它是開啟一個資料庫的檔案串流。
13-3-2 開啟DataReader物件-步驟四:檢查狀態或讀取記錄資料 • DataReader物件是一種資料串流,可以使用IsClosed屬性檢查DataReader串流是否已經開啟,如下所示: if (objDataReader.IsClosed == false) { Response.Write("<b>DataReader物件為開啟狀態</b><br/>"); } else { Response.Write("<b>DataReader物件為關閉狀態</b><br/>"); }
13-3-2 開啟DataReader物件-步驟五:關閉DataReader和資料庫連接 • 最後可以關閉DataReader串流物件和資料庫連接,如下所示: objDataReader.Close(); objCon.Close(); • 上述程式碼使用Close()方法關閉DataReader和Connection物件。
13-3-3 取得記錄的欄位名稱與值-說明 • 當ASP.NET程式使用Command物件的ExecuteReader()方法取得DataReader物件後,我們可以將DataReader物件視為一種類似檔案的記錄串流,在檔案中的每一列是一筆記錄,一次讀取一筆記錄,如下圖所示:
13-3-3 取得記錄的欄位名稱與值-讀取記錄 • 在開啟DataReader物件後,記錄指標是指向第1筆記錄之前,程式可以使用Read()方法讀取下一筆記錄,如下所示: objDataReader.Read(); • 上述程式碼執行Read()方法,換句話說,目前記錄指標就會移到下一筆,指向第1筆記錄,即MA146LL。
13-3-3 取得記錄的欄位名稱與值-相關方法 • 現在我們可以使用欄位定義資料的原始順序來取得欄位值、檢查欄位值是否存在或欄位的資料類型。其相關方法如下表所示:
13-3-4 使用表格顯示資料表-說明 • ASP.NET程式可以使用表格,一列代表一筆記錄,每一欄為一個欄位來顯示資料表的記錄資料,程式是使用HTML/XHTML表格標籤來顯示資料表。 • 亦可直接使用DataGrid控制項,以資料繫結方式來顯示資料表的記錄資料。
13-3-4 使用表格顯示資料表-讀取 • DataReader物件如同串流物件,ASP.NET程式可以使用while迴圈來讀取資料表的記錄,如下所示: while (objDR.Read()) { Response.Write("<tr>"); Response.Write("<td>"+ objDR["ModelNo"] +"</td>"); Response.Write("<td>"+ objDR["Name"] + "</td>"); Response.Write("<td>"+ objDR["Storage"] +"</td>"); Response.Write("<td>"+ objDR["Price"] + "</td>"); Response.Write("<td>"+ objDR["StockDate"] + "</td>"); Response.Write("</tr>"); }
13-3-4 使用表格顯示資料表-取得欄位 • DataReader物件是一個集合物件,可以使用欄位名稱或欄位順序來取得欄位值,如下所示: Response.Write("<td>"+ objDR["Name"] + "</td>"); Response.Write("<td>" + objDR[1] + "</td>"); • 程式碼的字串Name是欄位名稱,數值1是欄位Name的原始順序,取得資料的型態是資料庫欄位的資料類型,以此例為string字串,如果是Price欄位就是decimal資料型態。
完整範例 string strSQL = "SELECT * FROM iPod"; // 建立Command物件的SQL指令 OleDbCommand objCmd = new OleDbCommand(strSQL, objCon); // 取得DataReader物件 OleDbDataReader objDR = objCmd.ExecuteReader(); // 顯示資料表的記錄 while (objDR.Read()) { Response.Write("<tr>"); Response.Write("<td>"+ objDR["ModelNo"] +"</td>"); Response.Write("<td>"+ objDR["Name"] + "</td>"); Response.Write("<td>"+ objDR["Storage"] +"</td>"); Response.Write("<td>"+ objDR["Price"] + "</td>"); Response.Write("<td>"+ objDR["StockDate"] + "</td>"); Response.Write("</tr>"); } objDR.Close(); // 關閉DataReader objCon.Close(); // 關閉資料庫連接 %> </table> </body> </html> <!-- 程式範例:Ch13-3-4.aspx --> <%@ Page Language="C#" %> <%@ Import Namespace="System.Data" %> <%@ Import NameSpace="System.Data.OleDb" %> <html> <head><title>使用表格顯示資料表</title></head> <body> <table border="1"> <tr><th>型號</th><th>名稱</th><th>容量</th> <th>價格</th><th>進貨日期</th></tr> <% // OLEDB提供者字串 string strDbCon = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Server.MapPath("iPods.mdb"); // 建立Connection物件 OleDbConnection objCon = new OleDbConnection(strDbCon); objCon.Open(); // 開啟資料庫連接
13-6 ASP.NET控制項與資料繫結 • 13-6-1 ASP.NET資料繫結的基礎 • 補充: GridView控制項的資料繫結
13-6-1 ASP.NET資料繫結的基礎-說明 • ASP.NET的Web控制項支援資料繫結技術,可以將不同資料來源的集合物件、陣列、DataReader或DataView物件整合到ASP.NET的Web控制項。 • 不過,並非每一個Web控制項都支援資料繫結技術,只有擁有DataSource屬性的Web控制項才支援資料繫結。
13-6-1 ASP.NET資料繫結的基礎-步驟 • 在ASP.NET程式的Web控制項使用資料繫結的步驟,如下所示: • Step 1:定義資料來源和取得資料來源的資料物件。 • Step 2:指定控制項的DataSource屬性為此資料來源的資料物件,以資料庫來說就是DataReader等物件。 • Step 3:執行控制項的DataBind()方法建立資料連結。
補充: GridView控制項的資料繫結 GridView1.DataSource = objCmd.ExecuteReader(); GridView1.DataBind();