通過 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)

*
本頁內容
簡介簡介
要求要求
演練演練
參考參考

簡介

Jet 數據庫引擎由用於 Microsoft Access 數據庫的 Microsoft® Internet 信息服務 (IIS) 提供。此數據庫引擎通常可以替代 Microsoft SQL Server,並且對於低容量的 Web 應用程序非常有用。Jet 數據庫引擎是 OLEDB 兼容的,Microsoft .NET Framework System.Data.OleDb 命名空間中的類支持此引擎。

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

adon_wtaccessdb_01

1 ADO.NET 數據訪問管道

OleDbConnection 對象控制與 Jet 數據庫引擎的連接。OleDbCommand 包含告知數據庫引擎採取何種操作的 Microsoft SQL 語句。OleDbDataReader 是一個快速、只讀、僅向前的數據庫遊標,它可以讀取由 SQL 語句選定的記錄。DataGrid 可顯示記錄,並在添加、刪除或編輯記錄時引發事件。這些事件可以創建用於更改數據庫並顯示結果記錄的新 SQL 語句。

要求

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

Windows® XP (SP1) 和所有修補程序

Microsoft Internet 信息服務 (IIS)

Microsoft Access 2002

Visual Studio .NET

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

演練

在本演練中,您將使用 Microsoft Access 創建一個數據庫,並將使用 ADO.NET 創建、添加、編輯和刪除記錄。

創建數據庫

打開 Microsoft Access,在新建的文件夾 C:/Pets 中創建一個名爲 Pets.mdb 的空數據庫。

在 Designer(設計器)視圖中創建一個新表。

添加一個名爲 ID 的自動編號字段和兩個名爲 PetName 和 PetType 的文本字段。將 ID 設置爲主鍵,並接受所有默認設置。
adon_wtaccessdb_02
圖 2 在 Access 中設計數據表

切換至數據表視圖,並將表保存爲 PetTable

向表中添加若干項。
adon_wtaccessdb_03
圖 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 應用程序。數據庫的內容應顯示在瀏覽器中。
adon_wtaccessdb_04
圖 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 將反映所作的更改。
adon_wtaccessdb_05
圖 5 添加了編輯鏈接的 DataGrid

按 F5 鍵在調試器中啓動 Web 應用程序。數據庫的內容應顯示在瀏覽器中。
adon_wtaccessdb_06
圖 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(取消)鏈接。
adon_wtaccessdb_07
圖 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”。
adon_wtaccessdb_08
圖 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(添加)按鈕。一個新行將被添加到數據庫中。
adon_wtaccessdb_09
圖 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(刪除)按鈕。該行將從數據庫中刪除。

參考

有關詳細信息,請參閱以下主題:

Using ADO.NET(英文)
ASP.NET QuickStart Tutorial(英文)
詳細信息:使用 ADO.NET 解鎖 Microsoft Access 數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章