# 智能温室监控系统——数据持久化与本地存储 教学设计

| **课题** | **智能温室监控系统——数据持久化与本地存储** |
|:---|:---|
| **课时** | 1课时(45分钟) |
| **教学目标** | **知识目标**:理解数据持久化的概念与必要性,掌握SQLite数据库的基本特点,了解ADO.NET数据访问技术在项目中的应用价值。<br>**技能目标**:能够在C#项目中引用System.Data.SQLite组件,创建数据库文件与数据表,编写代码实现温湿度数据的插入操作,为项目构建历史数据存储功能模块。<br>**素养目标**:培养在项目开发中重视数据管理的意识,养成规范创建数据库结构、注重数据完整性的严谨工作习惯。 |
| **教学重难点** | **重点**:SQLite数据库的创建与连接、使用SQLiteCommand执行INSERT语句保存传感器数据。<br>**难点**:理解数据库连接字符串的构成、SQL参数化查询的编写方法及其在项目中防止数据异常的作用。 |
| **教学资源准备** | Visual Studio开发环境、System.Data.SQLite组件安装包、项目前期代码(已实现串口数据读取)、SQLite数据库管理工具(如DB Browser)、教学课件、Arduino温湿度采集硬件。 |

## 教学过程

| 教学环节 | 教学内容 | 教师活动 | 学生活动 | 设计意图 |
|:---|:---|:---|:---|:---|
| **项目问题引入**<br>(5分钟) | 回顾项目已完成功能,提出数据无法保存的实际问题,引出数据持久化需求。 | **问题驱动**<br>演示运行现有项目程序,关闭后数据消失,提问:"如果温室管理员想查看昨天的温度变化趋势,我们的系统能做到吗?这暴露了什么问题?"<br>**任务发布**<br>发布本课时项目任务:为系统添加历史数据存储功能。 | **观察思考**<br>观看演示,认识到项目当前的局限性;<br>**需求分析**<br>以项目开发者角色讨论数据保存的重要性,明确本课时要解决的实际问题。 | 从项目实际运行中发现问题,让学生认识到数据持久化是项目功能完善的必然需求,激发学习动机。 |
| **新知探究(关键技术)**<br>(12分钟) | 数据持久化概念、SQLite数据库特点、ADO.NET数据访问流程、数据库连接与表结构设计。 | **概念讲解**<br>讲解数据持久化定义,对比文件与数据库存储方式,说明SQLite轻量级特性适合项目需求;<br>**技术剖析**<br>讲解"连接数据库→创建命令对象→执行SQL语句→关闭连接"的标准流程;<br>**设计演示**<br>演示使用DB Browser创建SensorData表(字段:ID、Temperature、Humidity、RecordTime)。 | **聆听记录**<br>理解数据库在项目中的定位,记录关键概念;<br>**可视化理解**<br>通过工具直观认识数据库表结构,将抽象的"数据存储"转化为可见的表格形式。 | 将数据库理论与项目实际需求紧密结合,通过可视化工具降低认知难度,为后续编程实践奠定基础。 |
| **代码实现(项目功能开发)**<br>(18分钟) | 在项目中引用SQLite组件、编写数据库连接代码、实现数据插入功能。 | **操作示范**<br>演示通过NuGet安装System.Data.SQLite包,讲解连接字符串格式;<br>**核心编码**<br>带领学生在数据接收事件中编写插入代码,强调参数化查询的写法(使用`@Temperature`等占位符),说明其防止SQL注入的重要性;<br>**调试指导**<br>演示运行程序,查看数据库文件中是否成功写入数据。 | **跟随配置**<br>在自己的项目中安装组件,配置数据库路径;<br>**编写代码**<br>在教师脚手架支持下,将数据插入逻辑集成到现有数据接收方法中;<br>**测试验证**<br>运行程序,使用DB Browser打开数据库文件检查数据,体验项目功能的实现。 | 通过教师演示+学生实践的方式,将数据库操作无缝嵌入到已有项目框架中,完成从"读取显示"到"存储管理"的功能升级。 |
| **功能测试与优化**<br>(7分钟) | 测试数据存储功能、处理可能的异常情况、优化代码结构。 | **测试引导**<br>组织学生采集真实温湿度数据并观察数据库记录增长情况;<br>**异常处理**<br>提示学生添加try-catch语句捕获数据库操作异常,演示在连接失败时给出友好提示。 | **功能验收**<br>以项目测试员角色,检查数据是否准确保存,时间戳是否正确;<br>**代码完善**<br>在提示下添加异常处理代码,提升项目健壮性。 | 培养学生的测试意识和异常处理能力,体会项目开发中"能用"与"好用"的差别。 |
| **总结提升**<br>(3分钟) | 总结本课时完成的项目模块、知识要点回顾、展望后续功能。 | **模块总结**<br>总结本课时为项目增加的核心功能,强调数据持久化是后续数据分析、报表生成的基础;<br>**知识梳理**<br>回顾SQLite使用流程关键步骤;<br>**任务预告**<br>预告下节课将实现历史数据查询与图表展示功能。 | **自我评估**<br>对照项目任务检查自己的完成情况;<br>**反思记录**<br>记录本课时遇到的问题与解决方法。 | 帮助学生在项目推进过程中建立知识体系,明确当前进度与后续方向,保持项目学习的连贯性。 |

## 板书设计

```
智能温室监控系统 - 数据持久化模块
├─ 核心任务:保存历史温湿度数据
├─ 技术方案:C# + SQLite数据库
├─ 关键步骤:
│   1. 创建数据库与表结构(SensorData表)
│   2. 建立数据库连接(连接字符串)
│   3. 编写INSERT语句(参数化查询)
│   4. 在数据接收事件中调用保存方法
└─ 项目收益:数据可追溯、为分析功能打基础
```

## 教学成效与反思

| | |
|:---|:---|
| **教学成效** | 结合本课时"为项目添加数据持久化功能"这一阶段目标,约85%的学生能够成功配置SQLite环境并完成基本的数据插入操作,实现了温湿度数据的自动保存功能。学生通过可视化工具验证数据写入,直观感受到项目功能的实质性进步,成就感显著。少数学生在连接字符串路径配置上出现问题,经个别指导后解决。整体上,项目任务驱动下的学习目标达成度较高,学生角色代入感强,课堂参与积极。 |
| **教学反思** | 本课时成功将数据持久化这一重要概念融入"智能温室监控系统"项目的功能扩展中,教学逻辑连贯。通过"现有功能演示→发现问题→引入解决方案"的项目推进方式,学生能够自然理解数据库技术的必要性。不足之处在于,对SQL参数化查询的讲解略显仓促,部分学生对`@`占位符的理解停留在"照着写"的层面,未充分认识到其防止SQL注入的安全意义。今后应增加一个对比实验环节,演示拼接字符串与参数化查询的差异,强化安全编程意识。此外,可在课前准备阶段提供SQLite组件的安装视频,减少课上配置环境的时间损耗,为功能测试环节留出更充裕的时间。 |