VB.NET 还能做什么:桌面小工具
Visual Basic 听起来是"老语言",但在企业内部的小工具、窗口程序、报表系统里,VB.NET 依然是非常常见的选择:开发快、控件拖拖就能出界面、跟 SQL Server 配合得特别顺。它最擅长的就是快速做一个能在 Windows 上跑的桌面程序。
典型场景:给办公室做一个"登记—查询—导出"小工具;给车间做一个"扫码—入库"的小窗口;把一堆 Excel 汇总成一个能查询的小系统。这些活不需要微服务、不需要前端框架,一个 WinForms 窗口就能搞定。
VB.NET 的价值:用最少的代码,把一个"按钮 + 输入框 + 一张表"的内部小工具跑起来。它不是最时髦的,但它是真能用的。
- WinForms拖控件搭窗口,是 VB.NET 最主流的桌面框架。
- 事件驱动点按钮触发一个事件过程,代码就跑一段。
- ADO.NET连数据库、跑 SQL、把结果填进 DataTable。
- 数据绑定把 DataTable 直接绑到 DataGridView,表格自动出。
拖控件:搭一个最简单的窗口
在 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 快速做查询界面的秘诀。
实战:做一个员工登记小工具
串起来:窗口上放两个输入框(姓名、部门)、一个"保存"按钮、一个"刷新"按钮、一个 DataGridView。保存按钮写插入 SQL,刷新按钮写查询绑定。这就是一个能用的内部小工具。
' 保存按钮
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
If txtName.Text = "" Or txtDept.Text = "" Then
MessageBox.Show("姓名和部门都要填")
Return
End If
' 这里执行前面那段参数化 INSERT
MessageBox.Show("已保存")
txtName.Clear() : txtDept.Clear()
End Sub
' 刷新按钮
Private Sub btnRefresh_Click(sender As Object, e As EventArgs) Handles btnRefresh.Click
' 这里执行前面那段 SELECT 加 DataTable 绑定
End Sub
把这个小工具打包成 exe 发给同事,他们双击就能用——这就是 VB.NET 在企业内部最朴素也最实用的形态。
VB.NET 检查清单
把 VB.NET 桌面开发记成一条链:拖控件 → 挂事件 → 连库 → 参数化 SQL → 数据绑定。交付前对照自查:
- 连接字符串是不是放在 App.config 里,没有硬编码?
- 所有 SQL 是不是用了参数化,没有把用户输入直接拼进 SQL 文本?
- SqlConnection、SqlCommand 是不是包在 Using 块里,确保用完即释放?
- 用户操作(保存、删除)后有没有给 MessageBox 反馈?
- DataGridView 绑定的是不是最新数据,刷新时机对不对?
VB.NET 的哲学是"别让我写多余的代码":界面拖、事件挂、SQL 用参数、表格绑数据——把内部小工具做到最快最稳。
至此本批三篇从 MATLAB 仿真、R 文本挖掘到 VB.NET 桌面收束——它们代表了语言生态里"老牌但仍在干活"的那一面:不是最潮,但很实用。