本课学习目标
- 理解数据库与普通文本文件的主要区别。
- 认识关系型数据库(Relational Database)的基本思想。
- 理解数据库、表、列、行与记录。
- 理解主键(Primary Key)的作用。
- 认识常见 SQL 命令:SELECT、INSERT、UPDATE、DELETE。
- 理解连接字符串(Connection String)是什么。
- 认识 Windows Forms 数据库应用的基本分层。
- 理解 UI、SQL 命令、数据库连接与数据结果之间的数据流。
- 认识为什么数据库操作仍需要输入验证、异常处理和参数化查询。
- 完成一个数据库概念浏览器,为第 24 课真正连接数据库做准备。
23.1 为什么不一直使用文本文件?
文本文件适合简单数据,但当资料越来越多、需要搜索、修改、关联和排序时,数据库会更合适。
结构简单、容易理解,适合配置、日志和少量记录;复杂查询和多字段更新会越来越麻烦。
数据有明确结构,可以通过 SQL 查询、筛选、排序、更新,并用主键唯一识别记录。
快速找资料
例如找出成绩大于 80 的学生。
修改指定记录
通过 StudentID 精确修改某位学生。
连接不同表
学生、课程、选课记录可以分别保存再建立关系。
23.2 什么是关系型数据库?
关系型数据库把资料组织成表(Table)。每个表有列(Column),每一行代表一笔记录(Record / Row)。
| StudentID | Name | Course | Score |
|---|---|---|---|
| 1 Primary Key | 李明 | Visual Basic 2026 | 88 |
| 2 | 王芳 | C# Programming | 76 |
| 3 | 陈伟 | Python Programming | 91 |
23.3 数据库常用术语
| 术语 | 说明 | Students 示例 |
|---|---|---|
| Database | 整个数据库容器。 | StudentManagementDB |
| Table | 保存同一类资料的表。 | Students |
| Column / Field | 定义某一种资料。 | Name、Score |
| Row / Record | 一笔完整记录。 | 李明 / VB / 88 |
| Primary Key | 唯一识别每笔记录。 | StudentID |
23.4 为什么需要主键?
假设数据库里有两个都叫“李明”的学生,如果只用姓名修改资料,程序无法确定要改哪一个。
有了:
StudentID = 17
程序就能准确找到这一笔记录。
23.5 数据库列也有数据类型
数据库和 VB.NET 一样,也需要知道每个值属于哪一种数据类型。
| 资料 | VB.NET | 数据库概念 |
|---|---|---|
| StudentID | Integer | 整数类型 |
| Name | String | 文字类型 |
| Course | String | 文字类型 |
| Score | Double / Decimal | 数值类型 |
| EnrollmentDate | DateTime | 日期时间类型 |
23.6 什么是 SQL?
SQL(Structured Query Language)是与关系型数据库沟通的语言。Windows Forms 程序不会“猜”你想做什么,而是通过 SQL 命令要求数据库执行操作。
23.7 四个最重要的数据库操作
读取
查询数据库中的记录。
新增
加入一笔新记录。
修改
修改现有记录。
删除
删除指定记录。
这四种操作合称 CRUD:
Create
Read
Update
Delete
23.8 SELECT 示例
SELECT StudentID, Name, Course, Score
FROM Students;
意思是:从 Students 表读取指定列。
加入条件:
SELECT StudentID, Name, Score
FROM Students
WHERE Score >= 80;
意思是只读取成绩至少 80 的学生。
23.9 INSERT、UPDATE 与 DELETE 概念
INSERT
INSERT INTO Students (Name, Course, Score)
VALUES (...);
UPDATE
UPDATE Students
SET Score = ...
WHERE StudentID = ...;
DELETE
DELETE FROM Students
WHERE StudentID = ...;
23.10 程序怎样连接数据库?
Windows Forms 应用通常需要一个数据库连接对象。它依赖连接字符串(Connection String)告诉程序数据库在哪里,以及怎样连接。
23.11 什么是 Connection String?
连接字符串是告诉数据库驱动“要连接哪里、使用什么数据库和设置”的文字配置。
概念上可能包含:
Server = ...
Database = ...
Authentication = ...
Other settings = ...
23.12 Windows Forms 数据库应用的基本结构
这意味着:
- UI 负责与用户互动。
- 验证逻辑确保输入合理。
- 数据库连接负责与数据库通信。
- SQL 命令负责说明要读取或修改什么。
- 结果最终回到界面显示。
23.13 数据库不是 DataGridView
初学者容易把“屏幕上看到的数据表格”当成数据库。实际上:
真正保存资料的位置,即使应用关闭,数据仍可存在。
Windows Forms 控件,只负责把资料以行列方式显示在界面中。
第 26 课会专门学习 DataGridView。
23.14 数据库应用还需要哪些安全习惯?
不要信任输入
仍然使用 IsNullOrWhiteSpace、TryParse 和范围检查。
不要直接拼 SQL
使用参数传入用户资料,降低 SQL 注入和格式问题。
连接可能失败
数据库操作需要合理处理连接和执行异常。
23.15 实作:Student Database Explorer 2026
本课建立一个数据库“概念浏览器”,暂时不真正执行 SQL。目的在于让学生熟悉一个数据库应用的界面与数据流。
StudentDatabaseExplorer2026
Students Table
Columns: StudentID, Name, Course, Score
Primary Key: StudentID
Supported operations: SELECT, INSERT, UPDATE, DELETE
在 Form1 加入:
| 控件 | Name | 用途 |
|---|---|---|
| Label | lblDatabaseName | 显示 StudentManagementDB |
| ListBox | lstTables | 显示 Students |
| TextBox | txtStructure | Multiline = True;ReadOnly = True |
| Button | btnShowStructure | Text = 显示表结构 |
| Button | btnShowSql | Text = 显示 SQL 示例 |
| Label | lblStatus | 显示当前学习状态 |
Form.Load:准备概念资料
Private Sub Form1_Load(
sender As Object,
e As EventArgs) Handles MyBase.Load
lblDatabaseName.Text =
"Database: StudentManagementDB"
lstTables.Items.Clear()
lstTables.Items.Add("Students")
lblStatus.Text =
"数据库概念已准备完成。"
End Sub
显示表结构
Private Sub btnShowStructure_Click(
sender As Object,
e As EventArgs) Handles btnShowStructure.Click
txtStructure.Text =
"Table: Students" & Environment.NewLine &
"------------------------" & Environment.NewLine &
"StudentID : Integer - Primary Key" & Environment.NewLine &
"Name : String" & Environment.NewLine &
"Course : String" & Environment.NewLine &
"Score : Number"
lblStatus.Text =
"正在查看 Students 表结构。"
End Sub
显示 SQL 示例
Private Sub btnShowSql_Click(
sender As Object,
e As EventArgs) Handles btnShowSql.Click
txtStructure.Text =
"SELECT StudentID, Name, Course, Score" &
Environment.NewLine &
"FROM Students;"
lblStatus.Text =
"这是读取 Students 表的 SQL 示例。"
End Sub
23.16 从按钮到数据库的完整思维
例如“加载学生”。
例如 SELECT StudentID, Name FROM Students。
连接字符串告诉程序目标数据库。
数据库查找并返回结果。
可以放到 TextBox、ListBox 或后面的 DataGridView。
23.17 初学者常见误解
数据库就是一个 DataGridView
DataGridView 只是界面控件;数据库是实际存储与查询数据的系统。
姓名可以当可靠唯一标识
姓名可能重复。更新和删除通常应该依赖主键。
SQL 只负责读取
SQL 也能 INSERT、UPDATE、DELETE 和建立数据库结构。
连上数据库就不需要验证
数据库应用同样必须验证输入、处理异常并使用安全的参数化查询。
23.18 小练习
- 设计一个 Products 表,至少包含 ProductID、ProductName、UnitPrice、StockQuantity。
- 指出 Products 表中最适合作为主键的字段。
- 写一个概念 SQL:读取所有 Products。
- 写一个概念 SQL:读取 Score ≥ 80 的 Students。
- 解释为什么 DELETE 时应该使用 StudentID,而不是只使用 Name。
- 画出“Button → Validation → Connection → SQL → Database → UI”的数据流。
- 在实作界面中加入一个 ListBox,显示 SELECT、INSERT、UPDATE、DELETE 四种操作。
本课复习
- 数据库与文本文件最大的区别是什么?
- 关系型数据库怎样组织资料?
- Table、Column、Row 分别代表什么?
- Primary Key 的主要作用是什么?
- SQL 用来做什么?
- CRUD 四个字母分别代表什么?
- SELECT、INSERT、UPDATE、DELETE 各自做什么?
- Connection String 的作用是什么?
- 为什么 DataGridView 不是数据库本身?
- 为什么数据库应用仍然需要输入验证和异常处理?