ASP.NET + Access 数据库实例教程:从零开始构建一个简单的留言本

本教程将使用 ASP.NET Web Forms 技术和 Microsoft Access (.mdb) 数据库,这是一个经典的组合,非常适合初学者理解 Web 应用程序与数据库交互的基本原理。

asp.net access 实例教程
(图片来源网络,侵删)

第一部分:准备工作

在开始之前,请确保您的电脑上已安装以下软件:

  1. .NET Framework SDK: 通常包含在 Visual Studio 安装包中,我们推荐使用 Visual Studio 2025 或更高版本(社区版免费)。
  2. Microsoft Access: 您需要 Access 来创建 .mdb 数据库文件,如果您没有安装完整的 Access,也可以使用 Office 套件中的 Access Database Engine 来创建和操作 Access 数据库。
  3. IIS (可选): 如果您想在本地模拟真实服务器环境,可以安装 IIS,但 Visual Studio 自带的开发服务器已经足够学习和开发使用。

第二部分:创建数据库和表

我们将创建一个简单的留言本数据库,包含两个字段:ID(主键)和 Message)。

步骤 1:创建 Access 数据库文件

  1. 打开 Microsoft Access。
  2. 选择“空白数据库”。
  3. 将文件保存为 MessagesDB.mdb,并记住保存的位置(C:\YourProjectFolder\App_Data)。

    提示:在 ASP.NET 中,App_Data 是一个特殊的文件夹,用于存放数据文件(如 .mdf, .mdb, .xml 等),IIS 默认不会提供对这个文件夹的访问,因此可以增加数据安全性。

    asp.net access 实例教程
    (图片来源网络,侵删)

步骤 2:创建数据表

  1. 打开 MessagesDB.mdb 后,Access 会提示您创建一个新表,选择“创建”选项卡,然后点击“表设计”。
  2. 在设计视图中,定义以下字段:
字段名称 数据类型 说明
ID 自动编号 主键,每条留言的唯一标识符
Message 备注 存储留言的文本内容
PostDate 日期/时间 (可选)记录留言发布的时间
  1. 选中 ID 字段,在“表格工具设计”选项卡中,点击“主键”按钮,将其设置为主键。
  2. 关闭设计视图,Access 会提示您保存表,将其命名为 Messages

第三部分:创建 ASP.NET Web 项目

我们创建一个 ASP.NET Web Forms 项目。

步骤 1:创建新项目

  1. 打开 Visual Studio。
  2. 选择“创建新项目”。
  3. 在模板搜索框中输入 ASP.NET Web Application,然后选择“ASP.NET Web 应用程序”模板(确保使用 C#)。
  4. 为项目命名,GuestbookWebApp,然后点击“创建”。
  5. 在下一个窗口中,选择 “Web Forms” 模板,然后点击“创建”。

步骤 2:添加数据库文件到项目

asp.net access 实例教程
(图片来源网络,侵删)
  1. 在“解决方案资源管理器”中,右键点击项目名称。
  2. 选择“添加” -> “新建文件夹”,将文件夹命名为 App_Data
  3. 将之前创建的 MessagesDB.mdb 文件复制到 App_Data 文件夹中。
  4. 在“解决方案资源管理器”中,右键点击 App_Data 文件夹,选择“添加” -> “现有项”,然后选择 MessagesDB.mdb 文件,将其添加到项目中。

第四部分:编写代码实现 CRUD 功能

我们将创建几个页面来展示和操作数据。

Default.aspx (显示留言列表)

这个页面将用于从数据库中读取所有留言并显示出来。

  • 设计页面:

    • 从工具箱拖拽一个 GridView 控件到 Default.aspx 页面上。
    • 选中 GridView,在右下角的箭头中点击“编辑列...”。
    • 清空“选定的字段”,然后点击“将此字段绑定到新字段”,添加一个 BoundField,设置 DataFieldMessageHeaderText 为“留言内容”,同样,再添加一个 BoundFieldDataFieldPostDateHeaderText 为“发布时间”。
  • 后台代码 (Default.aspx.cs): 在 Page_Load 事件中编写代码来绑定数据。

using System;
using System.Data;
using System.Data.OleDb;
using System.Web.UI;
namespace GuestbookWebApp
{
    public partial class _Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            // 如果是第一次加载页面,则绑定数据
            if (!IsPostBack)
            {
                BindGridView();
            }
        }
        private void BindGridView()
        {
            // 1. 定义数据库连接字符串
            // 注意:Data Source=|DataDirectory| 表示 App_Data 文件夹
            string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\MessagesDB.mdb;";
            // 2. 创建 SQL 查询语句
            string sql = "SELECT ID, Message, PostDate FROM Messages ORDER BY PostDate DESC";
            // 3. 创建连接对象
            using (OleDbConnection conn = new OleDbConnection(connStr))
            {
                // 4. 创建适配器对象
                OleDbDataAdapter adapter = new OleDbDataAdapter(sql, conn);
                // 5. 创建数据集对象
                DataSet ds = new DataSet();
                // 6. 填充数据集
                adapter.Fill(ds, "Messages");
                // 7. 将数据绑定到 GridView
                GridViewMessages.DataSource = ds.Tables["Messages"];
                GridViewMessages.DataBind();
            }
        }
    }
}

AddMessage.aspx (添加新留言)

这个页面包含一个文本框和一个提交按钮。

  • 设计页面:

    • 添加一个 TextBox,设置 IDtxtMessageTextModeMultiLine
    • 添加一个 Button,设置 IDbtnSubmitText 为“提交留言”。
  • 后台代码 (AddMessage.aspx.cs): 在按钮的 Click 事件中编写插入数据的代码。

using System;
using System.Data;
using System.Data.OleDb;
using System.Web.UI;
namespace GuestbookWebApp
{
    public partial class AddMessage : Page
    {
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            // 1. 获取用户输入
            string message = txtMessage.Text.Trim();
            if (string.IsNullOrEmpty(message))
            {
                ClientScript.RegisterStartupScript(this.GetType(), "Alert", "alert('留言内容不能为空!');", true);
                return;
            }
            // 2. 定义数据库连接字符串
            string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\MessagesDB.mdb;";
            // 3. 创建 SQL 插入语句 (使用参数化查询防止SQL注入)
            string sql = "INSERT INTO Messages (Message, PostDate) VALUES (?, ?)";
            // 4. 使用 try-catch-finally 处理异常
            try
            {
                using (OleDbConnection conn = new OleDbConnection(connStr))
                {
                    using (OleDbCommand cmd = new OleDbCommand(sql, conn))
                    {
                        // 添加参数
                        cmd.Parameters.AddWithValue("?", message);
                        cmd.Parameters.AddWithValue("?", DateTime.Now);
                        // 打开连接
                        conn.Open();
                        // 执行 SQL 语句
                        cmd.ExecuteNonQuery();
                    }
                }
                // 插入成功后,重定向到留言列表页面
                Response.Redirect("Default.aspx");
            }
            catch (Exception ex)
            {
                // 显示错误信息
                // 在实际项目中,应该记录日志,而不是直接显示给用户
                ClientScript.RegisterStartupScript(this.GetType(), "Alert", "alert('留言失败: " + ex.Message + "');", true);
            }
        }
    }
}

EditMessage.aspx (编辑留言)

这个页面需要根据 URL 传递的留言 ID 来加载数据,并允许用户修改。

  • 设计页面:

    • 添加一个 TextBox,设置 IDtxtMessageEditTextModeMultiLine
    • 添加一个 Button,设置 IDbtnUpdateText 为“更新留言”。
    • 添加一个 HiddenField,设置 IDhfMessageId,用于存储当前编辑的留言 ID。
  • 后台代码 (EditMessage.aspx.cs):

using System;
using System.Data;
using System.Data.OleDb;
using System.Web.UI;