VB.NET 还能做什么:桌面小工具

Visual Basic 听起来是"老语言",但在企业内部的小工具、窗口程序、报表系统里,VB.NET 依然是非常常见的选择:开发快、控件拖拖就能出界面、跟 SQL Server 配合得特别顺。它最擅长的就是快速做一个能在 Windows 上跑的桌面程序。

典型场景:给办公室做一个"登记—查询—导出"小工具;给车间做一个"扫码—入库"的小窗口;把一堆 Excel 汇总成一个能查询的小系统。这些活不需要微服务、不需要前端框架,一个 WinForms 窗口就能搞定。

VB.NET 的价值:用最少的代码,把一个"按钮 + 输入框 + 一张表"的内部小工具跑起来。它不是最时髦的,但它是真能用的。
本文核心知识点
  • WinForms拖控件搭窗口,是 VB.NET 最主流的桌面框架。
  • 事件驱动点按钮触发一个事件过程,代码就跑一段。
  • ADO.NET连数据库、跑 SQL、把结果填进 DataTable。
  • 数据绑定把 DataTable 直接绑到 DataGridView,表格自动出。
VB.NET 桌面与数据库配图:蓝绿渐变背景上左侧一个发光的窗口界面方块(带按钮和输入框形状的抽象几何),中间用发光连线连到右侧一个圆柱形发光数据库图标,数据库向外延伸出多条数据管线
左侧窗口界面通过发光连线连到右侧圆柱形数据库——这就是 VB.NET 桌面程序的数据通路。

拖控件:搭一个最简单的窗口

在 Visual Studio 里新建一个 Windows Forms App(.NET)项目,你会看到一个空白窗口。从左边工具箱拖一个 TextBox(输入框)、两个 Button(按钮)、一个 Label(标签)到窗口上,摆好位置。这一步你没写一行代码,但界面已经长出来了。

' 双击窗口会自动跳到代码视图,窗口类长这样:
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' 窗口加载时要做的事写在这里
    End Sub
End Class

VB.NET 用 Handles 关键字把一段方法"挂"到某个控件的某个事件上。比如 Handles Button1.Click 就是"用户点 Button1 时执行这段代码"。

事件驱动:按钮按下发生了什么

VB.NET 是事件驱动的:程序启动后就坐在那儿等,用户点按钮、敲键盘、拖窗口,每一个动作都会触发一个事件,对应的方法被调用。你写的不是"从上到下跑一遍",而是"每个事件发生时该做什么"。

Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
    Dim name As String = txtName.Text   ' 读输入框
    If name = "" Then
        MessageBox.Show("请输入姓名")
        Return
    End If
    ' 后面就是把 name 存进数据库
End Sub

注意 MessageBox.Show:这是桌面程序最常用的反馈——告诉用户"操作成了/出错了/你没填完"。桌面程序没有网页那种 alert,就靠这一句。

连数据库:连接字符串是入口

桌面程序要存数据,最常见是接 SQL Server。连接字符串写着"服务器在哪、用什么账号、连哪个库",是所有数据库操作的第一步。

Dim connStr As String =
  "Server=.\SQLEXPRESS;Database=HrDB;Integrated Security=True;"
' 如果是账号密码登录:
' "Server=.;Database=HrDB;User Id=sa;Password=xxxx;"

把连接字符串放到配置文件(App.config)里,而不是硬编码在代码里——这样换服务器、换库只要改配置,不用改代码。

增删改查:ADO.NET 四步走

用 SqlConnection(连)+ SqlCommand(发命令)+ SqlDataReader(读结果)这一组对象做增删改查。以"插入一条员工记录"为例:

Dim sql As String =
  "INSERT INTO Employees(Name, Dept) VALUES(@Name, @Dept)"

Using conn As New SqlConnection(connStr)
    Using cmd As New SqlCommand(sql, conn)
        cmd.Parameters.AddWithValue("@Name", txtName.Text)
        cmd.Parameters.AddWithValue("@Dept", txtDept.Text)
        conn.Open()
        cmd.ExecuteNonQuery()
    End Using   ' Using 块结束自动关闭连接
End Using

两个关键点:一是 Using 块——离开块时连接自动释放,不用手动 Close;二是参数化查询(@Name、@Dept)——把用户输入和 SQL 文本分开,既防 SQL 注入,也省了拼字符串的麻烦。

数据绑定:把表塞进 DataGridView

查出来的结果通常是一堆行,怎么显示?拖一个 DataGridView 控件到窗口,把查询结果(一个 DataTable)直接绑给它,表格自动把所有行列画出来——你不用自己写一行排版代码。

Dim dt As New DataTable()
Using conn As New SqlConnection(connStr)
    Dim sql As String = "SELECT Id, Name, Dept, Salary FROM Employees"
    Using da As New SqlDataAdapter(sql, conn)
        da.Fill(dt)        ' 把查询结果填进 dt
    End Using
End Using
dgvEmployees.DataSource = dt   ' 绑到表格控件上

从用户视角看:他点一个"刷新"按钮,表格就把数据库里的员工列出来了。从代码视角看:你只是用 DataAdapter 拉了一张表、绑给控件——这就是 VB.NET 快速做查询界面的秘诀。