<script language=javascript>var IsPrinterFriendly = true;</script>
![]() |
![show toc](http://www.microsoft.com/library/mnp/2/gif/showtoc.gif)
通过 ADO.NET 编辑 Access 数据库
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)
![*](http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/3squares.gif)
本页内容
![]() | 简介 |
![]() | 要求 |
![]() | 演练 |
![]() | 参考 |
简介
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](https://i-blog.csdnimg.cn/blog_migrate/6845c5c8b1dee1e2003ab34f2cf85ddc.png)
图 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 设置为主键,并接受所有默认设置。 |
• | 切换至数据表视图,并将表保存为 PetTable。 |
• | 向表中添加若干项。 |
• | 保存表,并关闭 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 应用程序。数据库的内容应显示在浏览器中。 |
• | 关闭应用程序,然后关闭 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 将反映所作的更改。 |
• | 按 F5 键在调试器中启动 Web 应用程序。数据库的内容应显示在浏览器中。 |
编辑 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(取消)链接。 |
• | 单击 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”。 |
• | 双击该按钮,并将此代码插入到 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(添加)按钮。一个新行将被添加到数据库中。 |
从 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 数据