VB Visual Basic 2026 中文教程
第 24 课 · 第一次真正连接数据库

创建与连接数据库

上一课建立了数据库、表、主键和 SQL 的整体概念。本课开始真正动手:直接在 Visual Studio 的 SQL Server Object Explorer 中创建 LocalDB 数据库和 Students 表,再在 VB.NET Windows Forms 项目中安装 Microsoft.Data.SqlClient,通过 SqlConnection 打开数据库连接并显示连接状态。整个流程不需要使用 SQL Server Management Studio。

环境:Visual Studio 2026 · VB.NET · .NET 10数据库:SQL Server Express LocalDB实作:StudentDatabaseConnection2026

本课学习目标

  • 在 Visual Studio 打开 SQL Server Object Explorer。
  • 连接 (localdb)\MSSQLLocalDB
  • 创建 StudentManagementDB 数据库。
  • 通过 T-SQL 创建 Students 表。
  • 安装并使用 Microsoft.Data.SqlClient
  • 建立 DatabaseHelper.vb 与连接字符串。
  • 使用 SqlConnection.Open() 测试连接。
  • 使用 ExecuteScalar() 读取学生人数。

24.1 为什么选择 LocalDB?

LocalDB 是 SQL Server Express 的轻量本机开发方式。它适合学习真正的 SQL Server 表、主键、查询和连接,同时可以直接在 Visual Studio 内管理。

本机开发

适合学习

数据库运行在当前 Windows 用户环境中,适合桌面应用开发与测试。

真实 SQL

使用 T-SQL

可以真正执行 CREATE TABLE、SELECT、INSERT、UPDATE 和 DELETE。

Visual Studio

IDE 内管理

SQL Server Object Explorer 可以查看数据库、表、数据和执行查询。

24.2 打开 SQL Server Object Explorer

在 Visual Studio 菜单选择:

View
→ SQL Server Object Explorer

找到:

SQL Server
└─ (localdb)\MSSQLLocalDB
SQL Server Object Explorer
SQL Server
└─ (localdb)\MSSQLLocalDB
   ├─ Databases
   ├─ Security
   └─ Server Objects
如果看不到 MSSQLLocalDB 先确认 Visual Studio 安装包含 SQL Server / Data Tools 与 LocalDB 相关组件。不同安装配置的项目名称可能略有差异。

24.3 创建 StudentManagementDB

展开 (localdb)\MSSQLLocalDB

找到 Databases 节点。

右键 Databases

选择 Add New Database。

输入名称

StudentManagementDB。

刷新

确认数据库已经出现。

24.4 打开 New Query

右键 StudentManagementDBNew Query。确认查询窗口连接的数据库是 StudentManagementDB,而不是 master。

24.5 创建 Students 表

CREATE TABLE dbo.Students
(
    StudentID INT IDENTITY(1,1) PRIMARY KEY,
    Name NVARCHAR(100) NOT NULL,
    Course NVARCHAR(100) NOT NULL,
    Score DECIMAL(5,2) NOT NULL
        CHECK (Score BETWEEN 0 AND 100)
);

执行后刷新 Tables,应看到:

dbo.Students

24.6 理解表结构

字段SQL 类型设置意义
StudentIDINTIDENTITY + PRIMARY KEY自动编号并唯一识别学生。
NameNVARCHAR(100)NOT NULL学生姓名。
CourseNVARCHAR(100)NOT NULL课程名称。
ScoreDECIMAL(5,2)CHECK 0–100学生成绩。
IDENTITY(1,1) StudentID 从 1 开始,每新增一笔记录自动增加 1,因此新增学生时通常不需要手工输入主键。

24.7 加入测试资料

INSERT INTO dbo.Students
    (Name, Course, Score)
VALUES
    (N'李明', N'Visual Basic 2026', 88),
    (N'王芳', N'C# Programming', 76),
    (N'陈伟', N'Python Programming', 91);

然后执行:

SELECT StudentID, Name, Course, Score
FROM dbo.Students
ORDER BY StudentID;

如果看到三笔记录,数据库和表已经建立成功。

24.8 创建 Windows Forms 项目

建立:

StudentDatabaseConnection2026

使用 Visual Basic、Windows Forms 和 .NET 10。

24.9 安装 Microsoft.Data.SqlClient

右键项目

选择 Manage NuGet Packages。

Browse

搜索 Microsoft.Data.SqlClient。

安装 Microsoft 官方包

选择适用于当前项目的稳定版本。

安装后可以使用:

Imports Microsoft.Data.SqlClient

24.10 建立 DatabaseHelper.vb

Public NotInheritable Class DatabaseHelper

    Private Sub New()
    End Sub

    Public Shared ReadOnly Property ConnectionString As String
        Get
            Return
                "Server=(localdb)\MSSQLLocalDB;" &
                "Database=StudentManagementDB;" &
                "Integrated Security=True;" &
                "TrustServerCertificate=True;"
        End Get
    End Property

End Class
Server=(localdb)\MSSQLLocalDB Database=StudentManagementDB Integrated Security=True

24.11 理解连接字符串

设置作用
Server=(localdb)\MSSQLLocalDB指定 LocalDB 实例。
Database=StudentManagementDB指定目标数据库。
Integrated Security=True使用当前 Windows 身份。
TrustServerCertificate=True简化本机教学环境的证书配置。
不要把生产数据库密码直接写入源代码 本课使用 LocalDB 与 Windows Integrated Security,因此没有用户名和密码。以后连接远程生产数据库时,应使用安全配置或密钥管理方式。

24.12 设计测试界面

Student Database Connection 2026
数据库服务器:
(localdb)\MSSQLLocalDB
数据库:
StudentManagementDB
操作:
测试数据库连接读取学生人数
数据库连接成功。
Database: StudentManagementDB
State: Open
Students 表目前有 3 笔记录。

加入:

控件Name用途
ButtonbtnTestConnection测试连接
ButtonbtnCountStudents读取学生人数
LabellblStatus显示连接状态
TextBoxtxtInfoMultiline = True;ReadOnly = True

24.13 测试 SqlConnection

Form1.vb 顶部:

Imports Microsoft.Data.SqlClient

按钮代码:

Private Sub btnTestConnection_Click(
    sender As Object,
    e As EventArgs) Handles btnTestConnection.Click

    Try

        Using connection As New SqlConnection(
            DatabaseHelper.ConnectionString)

            connection.Open()

            lblStatus.Text =
                "数据库连接成功。"

            txtInfo.Text =
                $"Server: {connection.DataSource}" &
                Environment.NewLine &
                $"Database: {connection.Database}" &
                Environment.NewLine &
                $"State: {connection.State}"

        End Using

    Catch ex As SqlException

        lblStatus.Text =
            "数据库连接失败。"

        MessageBox.Show(
            ex.Message,
            "SQL Server 错误",
            MessageBoxButtons.OK,
            MessageBoxIcon.Error)

    Catch ex As Exception

        MessageBox.Show(
            ex.Message,
            "错误",
            MessageBoxButtons.OK,
            MessageBoxIcon.Error)

    End Try

End Sub

24.14 为什么要使用 Using?

Using connection As New SqlConnection(
    DatabaseHelper.ConnectionString)

    connection.Open()

    ' 执行数据库操作

End Using

离开 Using 后,连接对象会自动释放。数据库连接建议遵循“需要时才打开,用完尽快释放”的原则。

24.15 执行第一个查询:COUNT(*)

Private Sub btnCountStudents_Click(
    sender As Object,
    e As EventArgs) Handles btnCountStudents.Click

    Const sql As String =
        "SELECT COUNT(*) FROM dbo.Students;"

    Try

        Using connection As New SqlConnection(
            DatabaseHelper.ConnectionString)

            Using command As New SqlCommand(
                sql,
                connection)

                connection.Open()

                Dim studentCount As Integer =
                    Convert.ToInt32(
                        command.ExecuteScalar())

                lblStatus.Text =
                    "查询成功。"

                txtInfo.Text =
                    $"Students 表目前有 {studentCount} 笔记录。"

            End Using

        End Using

    Catch ex As SqlException

        MessageBox.Show(
            ex.Message,
            "数据库错误",
            MessageBoxButtons.OK,
            MessageBoxIcon.Error)

    End Try

End Sub

ExecuteScalar() 适合只返回一个值的查询,例如 COUNT、MAX、MIN 或 AVG。

24.16 完整连接流程

LocalDB数据库服务器
StudentManagementDB目标数据库
Connection String连接配置
SqlConnectionOpen()
SqlCommand执行 SQL

24.17 连接失败时怎样检查?

确认实例

SQL Server Object Explorer 是否能展开 (localdb)\MSSQLLocalDB?

确认数据库名

是否确实叫 StudentManagementDB?

确认表

Tables 下是否看得到 dbo.Students?

确认 NuGet 包

Microsoft.Data.SqlClient 是否已安装?

读取异常信息

ex.Message 往往能指出服务器、数据库或权限问题。

24.18 初学者常见错误

错误 1

New Query 连到 master

建表前确认目标数据库是 StudentManagementDB。

错误 2

数据库名称不一致

Object Explorer 中的名称必须与连接字符串一致。

错误 3

忘记安装 SqlClient

没有正确引用包时,Imports Microsoft.Data.SqlClient 和 SqlConnection 会报错。

错误 4

长期保持全局 Open 连接

建议每个数据库操作使用 Using,完成后立即释放。

24.19 小练习

  1. 把 COUNT 查询改成 SELECT MAX(Score) FROM dbo.Students
  2. 再加入一位学生,并确认 Count 增加。
  3. 执行 SELECT * FROM dbo.Students ORDER BY Score DESC
  4. 故意把连接字符串中的数据库名改错,观察 SqlException;然后恢复正确名称。
  5. 在 SQL Server Object Explorer 查看 dbo.Students 的 Columns、Keys 与 Constraints。

本课复习

  1. LocalDB 为什么适合本机开发学习?
  2. 怎样在 Visual Studio 打开 SQL Server Object Explorer?
  3. StudentID 为什么使用 PRIMARY KEY 与 IDENTITY?
  4. Microsoft.Data.SqlClient 在项目中负责什么?
  5. 连接字符串的 Server 与 Database 分别代表什么?
  6. SqlConnection.Open() 做什么?
  7. 为什么 SqlConnection 适合放在 Using 区块?
  8. ExecuteScalar() 适合哪一种查询?
技术参考: 本课流程依据 Microsoft Learn 关于 Visual Studio 数据连接、SQL Server Object Explorer、LocalDB 和 Microsoft.Data.SqlClient 的当前文档整理。 Visual Studio 数据连接 · SQL Server Object Explorer · SQL Server Express LocalDB