天天看點

通過 ADO.NET 編輯 Access 資料庫通過 ADO.NET 編輯 Access 資料庫

通過 ADO.NET 編輯 Access 資料庫

釋出日期: 8/8/2003 | 更新日期: 6/7/2004

Martin Tracy

Visual Studio Team

Microsoft Corporation

适用于: Microsoft® ADO.NET

Microsoft® asp.net

Microsoft® Visual C#® .NET

Microsoft® Visual Studio® .NET

摘要

:本演練說明了如何使用簡單的 Visual C#® 内含代碼 Web 應用程式通過 ADO.NET 在 Microsoft® Access 資料庫中添加、删除和編輯記錄。

下載下傳示例代碼 ADONETAccessDB.exe(英文)。(130KB)

通過 ADO.NET 編輯 Access 資料庫通過 ADO.NET 編輯 Access 資料庫
本頁内容
通過 ADO.NET 編輯 Access 資料庫通過 ADO.NET 編輯 Access 資料庫
簡介
通過 ADO.NET 編輯 Access 資料庫通過 ADO.NET 編輯 Access 資料庫
要求
通過 ADO.NET 編輯 Access 資料庫通過 ADO.NET 編輯 Access 資料庫
演練
通過 ADO.NET 編輯 Access 資料庫通過 ADO.NET 編輯 Access 資料庫
參考

簡介

Jet 資料庫引擎由用于 Microsoft Access 資料庫的 Microsoft® Internet 資訊服務 (IIS) 提供。此資料庫引擎通常可以替代 Microsoft SQL Server,并且對于低容量的 Web 應用程式非常有用。Jet 資料庫引擎是 OLEDB 相容的,Microsoft .NET Framework System.Data.OleDb 命名空間中的類支援此引擎。

本演練中您将使用的主要對象為 OleDbConnection、OleDbCommand 和 OleDbDataReader 對象,以及 DataGrid 伺服器控件。

通過 ADO.NET 編輯 Access 資料庫通過 ADO.NET 編輯 Access 資料庫
1 ADO.NET 資料通路管道

OleDbConnection 對象控制與 Jet 資料庫引擎的連接配接。OleDbCommand 包含告知資料庫引擎采取何種操作的 Microsoft SQL 語句。OleDbDataReader 是一個快速、隻讀、僅向前的資料庫遊标,它可以讀取由 SQL 語句標明的記錄。DataGrid 可顯示記錄,并在添加、删除或編輯記錄時引發事件。這些事件可以建立用于更改資料庫并顯示結果記錄的新 SQL 語句。

通過 ADO.NET 編輯 Access 資料庫通過 ADO.NET 編輯 Access 資料庫

傳回頁首

要求

在開始之前,您的計算機中必須安裝以下軟體:

Windows® XP (SP1) 和所有修補程式
Microsoft Internet 資訊服務 (IIS)
Microsoft Access 2002
Visual Studio .NET

在嘗試演練之前,請確定可以建立簡單的 Visual C# asp.net Web 應用程式。

通過 ADO.NET 編輯 Access 資料庫通過 ADO.NET 編輯 Access 資料庫

傳回頁首

演練

在本演練中,您将使用 Microsoft Access 建立一個資料庫,并将使用 ADO.NET 建立、添加、編輯和删除記錄。

建立資料庫

打開 Microsoft Access,在建立的檔案夾 C:/Pets 中建立一個名為 Pets.mdb 的空資料庫。
在 Designer(設計器)視圖中建立一個新表。
添加一個名為 ID 的自動編号字段和兩個名為 PetName 和 PetType 的文本字段。将 ID 設定為主鍵,并接受所有預設設定。
通過 ADO.NET 編輯 Access 資料庫通過 ADO.NET 編輯 Access 資料庫
圖 2 在 Access 中設計資料表
切換至資料表視圖,并将表儲存為 PetTable
向表中添加若幹項。
通過 ADO.NET 編輯 Access 資料庫通過 ADO.NET 編輯 Access 資料庫
圖 3 添加測試資料
儲存表,并關閉 Access

顯示資料庫記錄

OleDbConnection 對象包含将 Jet 資料庫引擎連接配接至 Pets.md 資料庫的連接配接字元串。構造連接配接字元串時,将提供相對于應用程式根目錄的 Pets.mdb 檔案位置。相對路徑通過 Server.MapPath 方法更改為實體路徑。這使得在将 Web 應用程式釋出至遠端伺服器的同時,Web 應用程式仍可用于 Jet 資料庫引擎。

OleDbCommand 對象包含 SQL 語句 SELECT * FROM PetTable,該語句可以選擇 PetTable 中的所有記錄。OleDbCommand.ExecuteReader 方法可以建立一個 OleDbDataReader 對象以讀取這些記錄。DataGrid 通過其 DataGrid.DataSource 屬性連接配接至資料讀取器。

執行 DataGrid.DataBind 方法時,資料庫記錄從資料庫移至 DataGrid,且每行顯示一個記錄。

打開 Visual Studio .NET。
在 http://localhost/Pets 建立一個新的 Visual C# asp.net Web 應用程式。
将檔案 WebForm1.aspx 重命名為 PetForm.aspx。
在 Solution Explorer(解決方案資料總管)中,右擊 Pets 項目根目錄并選擇 Add/New Folder(添加/建立檔案夾)。将檔案夾命名為 Pets。使檔案夾保持標明狀态。
右擊 Pets 項目,并将現有項 C:/Pets/Pets.mdb 添加到 Pets 檔案夾。必須在 Files of Type(檔案類型)下拉清單中選擇 All Files(所有檔案),才能在 Existing Item(現有項)浏覽器視窗中看到 Pets.mdb 檔案。
在工具箱中,将 DataGrid 拖動至 Web 窗體,将其重命名為 datagrid。
通過輕按兩下窗體切換至代碼視圖。
将此行添加到 WebForm1.aspx.cs 開始處的 using 語句 using System.Data.OleDb;
将此代碼插入到 Page_Load 方法:
private void Page_Load(object sender, System.EventArgs e)
    {
         if (!IsPostBack)  ReadRecords();
    }
      
将 ReadRecords 方法添加到緊接在 Page_Load 方法之後的 PetForm 類:
private void ReadRecords()
{
    OleDbConnection conn = null;
    OleDbDataReader reader = null;
    try
    {
        conn = new OleDbConnection(
            "Provider=Microsoft.Jet.OLEDB.4.0; " + 
            "Data Source=" + Server.MapPath("Pets/Pets.mdb"));
        conn.Open();
        OleDbCommand cmd = 
            new OleDbCommand("Select * FROM PetTable", conn);
        reader = cmd.ExecuteReader();
        datagrid.DataSource = reader;
        datagrid.DataBind();
}
//        catch (Exception e)
//        {
//            Response.Write(e.Message);
//            Response.End();
//        }
    finally
    {
        if (reader != null)  reader.Close();
        if (conn != null)  conn.Close();
    }
}
      
按 F5 鍵在調試器中啟動 Web 應用程式。資料庫的内容應顯示在浏覽器中。
通過 ADO.NET 編輯 Access 資料庫通過 ADO.NET 編輯 Access 資料庫
圖 4 浏覽器中顯示的資料庫
關閉應用程式,然後關閉 Visual Studio
注意

: 上述代碼中包含 catch 語句的注釋。預設情況下,Visual Studio 将建立一個 C# Web 應用程式項目,其 Generate Debugging Information 屬性設定為 true。這将在 bin 目錄建立一個 Pets.pdb 檔案。預設的 asp.net 錯誤處理程式将使用此資訊來建立錯誤詳細資訊頁面,該頁面顯示了發生錯誤的源行以及堆棧跟蹤和其他錯誤資訊。

調試項目後,可以将 Generate Debugging Information 設定為 false,不再建構 Pets.pdb。此時,可以删除 catch 語句的注釋,并将其替換為自己的錯誤處理程式。

配置資料庫

預設情況下,ASP.NET 使用者沒有向資料庫中寫入記錄或在包含資料庫的檔案夾中建立鎖定檔案 (.ldb) 的權限。您必須授予 asp.net 使用者這些權限。通常使用以下三種方法之一來授予權限:

将 asp.net 使用者添加到管理者組。
為 web.config 檔案中的應用程式啟用模拟。
為資料庫檔案以及包含該資料庫的檔案夾添加 asp.net 寫入權限。

在本演練中,您将使用第三種(最安全的)方法授予寫入權限。

在 File Explorer(檔案資料總管)中,找到建立的 Pets 檔案夾,它通常位于 C:/Inetpub/wwwroot/Pets/Pets。
右擊 Pets 檔案夾,并選擇 Properties(屬性)。
選擇 Security(安全)頁籤,并單擊 Add(添加)按鈕。
添加對象名 <YOURMACHINE>/ASPNET,其中 <YOURMACHINE> 是您的計算機名。單擊 OK(确定)傳回到 Security(安全)頁籤。
選擇 asp.net 帳戶,并添加 Write(寫入)權限。此帳戶被命名為 aspnet_wp 帳戶、ASP.NET MACHINE 帳戶或其他類似的名稱。
在 File Explorer(檔案資料總管)中,右擊檔案 Pets.mdb,并選擇 Properties(屬性)。
選擇 Security(安全)頁籤,并單擊 Advanced(進階)按鈕。
選取 Inherit from parent the permissions entries that apply to child objects(從父項繼承那些可以應用到子對象的權限項目)。單擊 OK(确定)以接受更改。

有關 asp.net 安全問題的詳細資訊,請參閱 Authentication in ASP.NET: .NET Security Guidance(英文)。

建立 DataGrid 編輯列

您可以使用 Visual Studio 屬性生成器向 DataGrid 添加列。屬性生成器包含格式選項,可以向 DataGrid 添加顔色和樣式。

在 Visual Studio 的 Designer(設計器)視圖中,選擇 DataGrid。如果 Property(屬性)視窗未打開,請從 View(視圖)菜單将其打開。
在 Properties(屬性)視窗的最底部會顯示兩個連結:Auto Format(自動格式)和 Property Builder(屬性生成器)。選擇 Property Builder(屬性生成器)。
選擇 Columns(列)視圖。
取消選取 Create columns automatically at run time(運作時自動建立列)。
在 Available Columns(可用列)清單中,展開 Button(按鈕)列。選擇 Edit(編輯)、Update(更新)、Cancel(取消)選項。單擊“>”按鈕将其添加到 Selected Columns(標明列)清單中。
在 Available Columns(可用列)清單中,選擇 Bound Column(綁定列)。單擊“>”按鈕将其添加到 Selected Columns(標明列)清單中。将标頭文本設定為“寵物名字”,将 Data(資料)字段設定為“PetName”。
重複上一步以添加其他綁定列,将标頭文本設定為“寵物類型”,将 Data(資料)字段設定為“PetType”。
單擊 OK(确定)傳回到 Designer(設計器)視圖。DataGrid 将反映所作的更改。
在 Properties(屬性)視窗的最底部,選擇 Auto Format(自動格式)。
選擇一個格式,例如“Colorful 1”。
單擊 OK(确定)傳回到 Designer(設計器)視圖。DataGrid 将反映所作的更改。
通過 ADO.NET 編輯 Access 資料庫通過 ADO.NET 編輯 Access 資料庫
圖 5 添加了編輯連結的 DataGrid
按 F5 鍵在調試器中啟動 Web 應用程式。資料庫的内容應顯示在浏覽器中。
通過 ADO.NET 編輯 Access 資料庫通過 ADO.NET 編輯 Access 資料庫
圖 6 浏覽器中的編輯連結和資料

編輯 DataGrid

DataGrid.EditItemIndex 屬性可以選擇一行進行編輯。標明一行進行編輯時,在每個單元格中将顯示文本框。每個文本框中的文本被設定為資料記錄中相應字段的值。

您必須将 Edit(編輯)連結連接配接到某個事件處理程式,該事件處理程式可以選擇包含要進行編輯的連結的行。您還應該将 Cancel(取消)連結(尚不可見)連接配接到某個事件處理程式,該事件處理程式可以恢複 DataGrid 行而不更改相應的記錄。

在 Visual Studio 的 Designer(設計器)視圖中選擇 DataGrid,并在 Properties(屬性)視窗(閃電圖形)中單擊 Events(事件)頁籤。輕按兩下 CancelCommand 以建立 datagrid_CancelCommand 事件處理程式。傳回到 Events(事件)頁籤,并輕按兩下 EditCommand 以建立 datagrid_EditCommand 事件處理程式。
将以下代碼插入到這兩個事件處理程式中:
private void datagrid_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
    datagrid.EditItemIndex = -1;
    ReadRecords();    
}
private void datagrid_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
    datagrid.EditItemIndex = e.Item.ItemIndex;
    ReadRecords();
}
      
按 F5 鍵啟動 Web 應用程式。
單擊第二行左側的 Edit(編輯)連結。DataGrid 将顯示一行,并在文本框中顯示 PetName 和 PetType 字段的值。Edit(編輯)連結将更改為 Update(更新)和 Cancel(取消)連結。
通過 ADO.NET 編輯 Access 資料庫通過 ADO.NET 編輯 Access 資料庫
圖 7 在浏覽器中編輯資料(已單擊 Edit [編輯] 連結)
單擊 Cancel (取消)傳回到預設的 DataGrid 顯示。

更新 DataGrid

標明一行進行編輯時,将顯示 Update(更新)和 Cancel(取消)連結。使用文本框為資料庫記錄中的字段輸入新值後,必須将這些更改移回資料庫。

您必須将 Update(更新)連結連接配接到某個事件處理程式,該事件處理程式可以讀取每個文本框并更新相應記錄中的字段。DataGrid.DataKeyField 使用資料庫表的主鍵字段将每行與其相應的記錄相關聯。您可以生成 SQL 語句來更新使用新字段值的記錄,然後調用 OleDbCommand.ExecuteNonQuery 來執行更新。

在 Visual Studio 的 Designer(設計器)視圖中,選擇 DataGrid。在 Properties(屬性)視窗中,将 DataKeyField 屬性設定為 ID。
在 Properties(屬性)視圖(閃電圖形)中單擊 Events(事件)頁籤。輕按兩下 UpdateCommand 以建立 datagrid_UpdateCommand 事件處理程式。
将以下代碼插入到該事件處理程式中:
private void datagrid_UpdateCommand(object source, 
    System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
    int ID = (int) datagrid.DataKeys[(int) e.Item.ItemIndex];
    string name = ((TextBox)e.Item.Cells[1].Controls[0]).Text;
    string type = ((TextBox)e.Item.Cells[2].Controls[0]).Text;
    string sql = 
        "UPDATE PetTable SET PetName=/"" + name + 
        "/", PetType=/"" + type + "/"" +
        " WHERE ID=" + ID;
    ExecuteNonQuery(sql);
    datagrid.EditItemIndex = -1;
    ReadRecords();
}
      
将 ExecuteNonQuery 方法添加到 PetForm 類:
private void ExecuteNonQuery(string sql)
{
    OleDbConnection conn = null;
    try
    {
        conn = new OleDbConnection(
            "Provider=Microsoft.Jet.OLEDB.4.0; " + 
            "Data Source=" + Server.MapPath("Pets/Pets.mdb"));
        conn.Open();
        OleDbCommand cmd = 
            new OleDbCommand(sql, conn);
        cmd.ExecuteNonQuery();
    }
//  catch (Exception e)
//  {
//      Response.Write(e.Message);
//      Response.End();
//  }
    finally
    {
        if (conn != null)  conn.Close();
    }
}
      
按 F5 鍵啟動 Web 應用程式。
單擊第二行左側的 Edit(編輯)連結。
将 PetType 文本框中的文本由“狗”更改為“犬”。
單擊 Update(更新)連結以檢視更新的 DataGrid。

向 DataGrid 添加記錄

DataGrid 不支援“添加”列,但是可以使用按鈕單擊事件處理程式以向資料庫中添加記錄。可以建立 SQL 語句來添加記錄,然後調用 OleDbCommand.ExecuteNonQuery 來更新資料庫。

在 Visual Studio 的 Designer(設計器)視圖中,将某個按鈕從工具欄拖動到窗體并将其命名為 btnAddPet。将其文本更改為“Add Pet”。
通過 ADO.NET 編輯 Access 資料庫通過 ADO.NET 編輯 Access 資料庫
圖 8 将添加按鈕添加到 DataGrid
輕按兩下該按鈕,并将此代碼插入到 btnAddPet_Click 方法:
private void btnAddPet_Click(object sender, System.EventArgs e)
{
    string sql = "INSERT INTO PetTable (PetName, PetType)"
        + " VALUES (/"new/", /"new/")";
    ExecuteNonQuery(sql);
    ReadRecords();
}
      
按 F5 鍵啟動 Web 應用程式。
單擊 Add(添加)按鈕。一個新行将被添加到資料庫中。
通過 ADO.NET 編輯 Access 資料庫通過 ADO.NET 編輯 Access 資料庫
圖 9 添加的新行

從 DataGrid 中删除行

您可以使用屬性生成器向 DataGrid 添加 Delete(删除)列。您必須将 Delete(删除)連結連接配接到可以删除資料庫中相應記錄的事件處理程式。可以使用 DataGrid.DataKeyField 屬性将要被删除的行與其相應的記錄相關聯。可以建立 SQL 語句來删除記錄,然後調用 OleDbCommand.ExecuteNonQuery 來更新資料庫。

在 Visual Studio 的 Designer(設計器)視圖中,選擇 DataGrid。
在 Properties(屬性)視窗的最底部,選擇 Property Builder(屬性生成器)。
選擇 Columns(列)視圖。
在 Available Columns(可用列)清單中,展開 Button(按鈕)列。選擇 Delete(删除)選項。單擊“>”按鈕将其添加到 Selected Columns(標明列)清單中。單擊 OK(确定)傳回到 Designer(設計器)視圖。
選擇 DataGrid,并在 Properties(屬性)視窗(閃電圖形)中單擊 Events(事件)頁籤。輕按兩下 DeleteCommand 以建立 datagrid_DeleteCommand 事件處理程式。
将以下代碼插入到該事件處理程式中:
private void datagrid_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
    int ID = (int) datagrid.DataKeys[(int) e.Item.ItemIndex];
      sql = "DELETE FROM PetTable WHERE ID=" + ID;
    ExecuteNonQuery(sql);
    ReadRecords();
}
      
按 F5 鍵啟動 Web 應用程式。
單擊最後一行右側的 Delete(删除)按鈕。該行将從資料庫中删除。
通過 ADO.NET 編輯 Access 資料庫通過 ADO.NET 編輯 Access 資料庫

傳回頁首

參考

有關詳細資訊,請參閱以下主題:

Using ADO.NET(英文)

ASP.NET QuickStart Tutorial(英文)

詳細資訊:使用 ADO.NET 解鎖 Microsoft Access 資料