VB Visual Basic 2026 中文教程
第 23 课 · 从文件走向数据库

数据库应用入门

前面我们已经用变量、List 和文本文件保存资料。数据库进一步提供结构化存储、快速查询、唯一标识、数据关系与并发访问能力。本课先建立数据库应用的核心概念,理解 Windows Forms、SQL 与数据库之间怎样协作,为下一课真正创建和连接数据库做好准备。

适合:完成第 22 课的初学者建议时间:55–70 分钟实作:StudentDatabaseExplorer2026

本课学习目标

  • 理解数据库与普通文本文件的主要区别。
  • 认识关系型数据库(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)。

Students 表
StudentIDNameCourseScore
1 Primary Key李明Visual Basic 202688
2王芳C# Programming76
3陈伟Python Programming91

23.3 数据库常用术语

术语说明Students 示例
Database整个数据库容器。StudentManagementDB
Table保存同一类资料的表。Students
Column / Field定义某一种资料。Name、Score
Row / Record一笔完整记录。李明 / VB / 88
Primary Key唯一识别每笔记录。StudentID

23.4 为什么需要主键?

假设数据库里有两个都叫“李明”的学生,如果只用姓名修改资料,程序无法确定要改哪一个。

有了:

StudentID = 17

程序就能准确找到这一笔记录。

主键的重点是唯一性 显示名称可能重复,主键则应该唯一。后面的 UPDATE 和 DELETE 都会大量依赖主键。

23.5 数据库列也有数据类型

数据库和 VB.NET 一样,也需要知道每个值属于哪一种数据类型。

资料VB.NET数据库概念
StudentIDInteger整数类型
NameString文字类型
CourseString文字类型
ScoreDouble / Decimal数值类型
EnrollmentDateDateTime日期时间类型

23.6 什么是 SQL?

SQL(Structured Query Language)是与关系型数据库沟通的语言。Windows Forms 程序不会“猜”你想做什么,而是通过 SQL 命令要求数据库执行操作。

VB.NET 应用
→ SQL →
数据库

23.7 四个最重要的数据库操作

SELECT

读取

查询数据库中的记录。

INSERT

新增

加入一笔新记录。

UPDATE

修改

修改现有记录。

DELETE

删除

删除指定记录。

这四种操作合称 CRUD:

Create
Read
Update
Delete
第 23 课只建立整体概念 第 24 课会真正创建与连接数据库;第 25 课再系统完成 CRUD。

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 = ...;
这里故意没有把用户输入直接拼进 SQL 真正应用应该使用参数化 SQL,而不是把 TextBox.Text 直接连接到 SQL 字符串。第 27 课会专门讲参数化查询。

23.10 程序怎样连接数据库?

Windows Forms 应用通常需要一个数据库连接对象。它依赖连接字符串(Connection String)告诉程序数据库在哪里,以及怎样连接。

Form 控件用户输入
VB.NET 代码验证资料
数据库连接Connection
SQL 命令Command
数据库Tables / Rows

23.11 什么是 Connection String?

连接字符串是告诉数据库驱动“要连接哪里、使用什么数据库和设置”的文字配置。

概念上可能包含:

Server = ...
Database = ...
Authentication = ...
Other settings = ...
不要急着背连接字符串 不同数据库系统和连接方式的格式不同。下一课会结合实际项目创建数据库,再得到正确的连接配置。

23.12 Windows Forms 数据库应用的基本结构

UITextBox / Button
验证TryParse / If
数据访问Connection / Command
SQL Server / DB执行 SQL
结果回到 UI显示资料

这意味着:

  • UI 负责与用户互动。
  • 验证逻辑确保输入合理。
  • 数据库连接负责与数据库通信。
  • SQL 命令负责说明要读取或修改什么。
  • 结果最终回到界面显示。

23.13 数据库不是 DataGridView

初学者容易把“屏幕上看到的数据表格”当成数据库。实际上:

数据库

真正保存资料的位置,即使应用关闭,数据仍可存在。

DataGridView

Windows Forms 控件,只负责把资料以行列方式显示在界面中。

第 26 课会专门学习 DataGridView。

23.14 数据库应用还需要哪些安全习惯?

验证

不要信任输入

仍然使用 IsNullOrWhiteSpace、TryParse 和范围检查。

参数化

不要直接拼 SQL

使用参数传入用户资料,降低 SQL 注入和格式问题。

异常处理

连接可能失败

数据库操作需要合理处理连接和执行异常。

23.15 实作:Student Database Explorer 2026

本课建立一个数据库“概念浏览器”,暂时不真正执行 SQL。目的在于让学生熟悉一个数据库应用的界面与数据流。

StudentDatabaseExplorer2026
Student Database Explorer 2026
Database StudentManagementDB Tables Students

Students Table

Columns: StudentID, Name, Course, Score

Primary Key: StudentID

Supported operations: SELECT, INSERT, UPDATE, DELETE

Status: Database concepts ready. Connection will be added in Lesson 24.

在 Form1 加入:

控件Name用途
LabellblDatabaseName显示 StudentManagementDB
ListBoxlstTables显示 Students
TextBoxtxtStructureMultiline = True;ReadOnly = True
ButtonbtnShowStructureText = 显示表结构
ButtonbtnShowSqlText = 显示 SQL 示例
LabellblStatus显示当前学习状态

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 课先把数据库结构、SQL 和应用数据流讲清楚;第 24 课才真正创建数据库并建立连接。

23.16 从按钮到数据库的完整思维

1
用户点击按钮

例如“加载学生”。

2
程序准备 SQL

例如 SELECT StudentID, Name FROM Students。

3
打开数据库连接

连接字符串告诉程序目标数据库。

4
数据库执行命令

数据库查找并返回结果。

5
程序显示结果

可以放到 TextBox、ListBox 或后面的 DataGridView。

23.17 初学者常见误解

误解 1

数据库就是一个 DataGridView

DataGridView 只是界面控件;数据库是实际存储与查询数据的系统。

误解 2

姓名可以当可靠唯一标识

姓名可能重复。更新和删除通常应该依赖主键。

误解 3

SQL 只负责读取

SQL 也能 INSERT、UPDATE、DELETE 和建立数据库结构。

误解 4

连上数据库就不需要验证

数据库应用同样必须验证输入、处理异常并使用安全的参数化查询。

23.18 小练习

  1. 设计一个 Products 表,至少包含 ProductID、ProductName、UnitPrice、StockQuantity。
  2. 指出 Products 表中最适合作为主键的字段。
  3. 写一个概念 SQL:读取所有 Products。
  4. 写一个概念 SQL:读取 Score ≥ 80 的 Students。
  5. 解释为什么 DELETE 时应该使用 StudentID,而不是只使用 Name。
  6. 画出“Button → Validation → Connection → SQL → Database → UI”的数据流。
  7. 在实作界面中加入一个 ListBox,显示 SELECT、INSERT、UPDATE、DELETE 四种操作。

本课复习

  1. 数据库与文本文件最大的区别是什么?
  2. 关系型数据库怎样组织资料?
  3. Table、Column、Row 分别代表什么?
  4. Primary Key 的主要作用是什么?
  5. SQL 用来做什么?
  6. CRUD 四个字母分别代表什么?
  7. SELECT、INSERT、UPDATE、DELETE 各自做什么?
  8. Connection String 的作用是什么?
  9. 为什么 DataGridView 不是数据库本身?
  10. 为什么数据库应用仍然需要输入验证和异常处理?