Visual Basic .NET 数据表单与数据库操作全解析
1. 使用数据表单向导创建数据表单
数据表单允许用户轻松输入和编辑数据,并根据需要更新数据源。数据表单向导可以帮助我们创建所需的代码。以下是创建数据表单的详细步骤:
1. 创建一个名为 DataFormDB 的新 Windows 应用程序。
2. 使用“项目” -> “添加新项”菜单项创建一个新的数据表单 DataForm1.vb,选择模板框中的“数据表单向导”图标并点击“确定”,打开数据表单向导。
3. 点击向导中的“下一步”,为要创建的数据集命名(例如 dsAuthors)。
4. 在下一个面板中,选择要使用的数据连接(这里使用与 pubs 数据库的连接)。
5. 选择要添加到数据表单的表(这里仅添加 authors 表)。
6. 指定要在数据表单中显示的表和列(这里保留 authors 表的所有列选中状态)。
7. 选择显示样式,这里选择单独的控件,这意味着数据表单将包含添加、删除和其他编辑控件。
8. 点击“完成”按钮创建数据表单 DataForm1.vb 并将其添加到项目中。
以下是在主表单中添加代码,使数据表单在用户点击按钮时可见的示例:
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim frmDataForm1 As New DataForm1
frmDataForm1.Show()
End Sub
新的数据表单类似于之前创建的 BoundDB 示例,有一些额外的按钮。用户可以使用 <<、<、> 和 >> 按钮浏览 authors 表中的记录,每个记录的各个字段都绑定到数据表单中的控件(例如,布尔类型的 contract 字段绑定到复选框)。用户还可以使用数据表单编辑 authors 表中的数据,通过添加、删除、取消和更新按钮进行操作。
2. 数据表单的操作代码解析
2.1 创建新记录
当用户点击数据表单中的“添加”按钮时,数据表单会创建一个新记录,使其成为数据集中的最后一条记录。以下是实现代码:
Private Sub btnAdd_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnAdd.Click
Try
'Clear out the current edits
Me.BindingContext(objdsAuthors, “authors”).EndCurrentEdit()
Me.BindingContext(objdsAuthors, “authors”).AddNew()
Catch eEndEdit As System.Exception
System.Windows.Forms.MessageBox.Show(eEndEdit.Message)
End Try
Me.objdsAuthors_PositionChanged()
End Sub
这里使用了 BindingManagerBase 的 AddNew 方法添加新记录,并调用 objdsAuthors_PositionChanged 过程更新导航按钮之间的标签。
2.2 删除记录
当用户点击“删除”按钮时,使用 RemoveAt 方法删除当前记录:
Private Sub btnDelete_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnDelete.Click
If (Me.BindingContext(objdsAuthors, “authors”).Count > 0) Then
Me.BindingContext(objdsAuthors, “authors”).RemoveAt(_
Me.BindingContext(objdsAuthors, “authors”).Position)
Me.objdsAuthors_PositionChanged()
End If
End Sub
2.3 取消编辑
当用户点击“取消”按钮时,使用 CancelCurrentEdit 方法取消当前编辑操作:
Private Sub btnCancel_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnCancel.Click
Me.BindingContext(objdsAuthors, “authors”).CancelCurrentEdit()
Me.objdsAuthors_PositionChanged()
End Sub
2.4 更新数据源
当完成编辑操作并想将更改发送回基础数据库时,使用数据适配器的 Update 方法:
Public Sub UpdateDataSource(ByVal ChangedRows As DataFormDB.dsAuthors)
Try
'The data source only needs to be updated if there are changes pending.
If (Not (ChangedRows) Is Nothing) Then
'Open the connection.
Me.OleDbConnection1.Open()
'Attempt to update the data source.
OleDbDataAdapter1.Update(ChangedRows)
End If
Catch updateException As System.Exception
'Add your error handling code here.
Throw updateException
Finally
'Close the connection whether or not the exception was thrown.
Me.OleDbConnection1.Close()
End Try
End Sub
3. 数据输入表单中的数据验证
在 Windows 表单中,我们可以验证用户输入到数据输入控件中的数据。数据验证基于 ErrorProvider 类,以下是 ErrorProvider 对象的重要公共属性和方法:
| 属性 | 含义 |
|---|---|
| BlinkRate | 返回或设置错误图标的闪烁速率 |
| BlinkStyle | 返回或设置错误图标是否闪烁 |
| ContainerControl | 返回或设置此错误提供程序的父控件 |
| DataMember | 返回或设置要监视的数据表 |
| DataSource | 返回或设置要监视的数据集 |
| Icon | 返回或设置当为错误提供程序分配非空字符串时,要在控件旁边显示的图标 |
| 方法 | 含义 |
|---|---|
| BindToDataAndErrors | 在运行时设置 DataSource 和 DataMember 属性 |
| GetError | 返回错误描述字符串 |
| GetIconAlignment | 返回错误图标相对于控件的位置 |
| GetIconPadding | 返回图标旁边要留出的空间 |
| SetError | 设置错误文本 |
| SetIconAlignment | 设置错误图标相对于控件的位置 |
| SetIconPadding | 设置图标旁边要留出的空间 |
以下是验证用户输入到文本框中的数据的示例代码:
Private Sub TextBox1_Validating(ByVal sender As Object, _
ByVal e As System.ComponentModel.CancelEventArgs) Handles
TextBox1.Validating
If TextBox1.Text.Length = 0 Then
ErrorProvider1.SetError(TextBox1, “Please enter some text.”)
Else
ErrorProvider1.SetError(TextBox1, “”)
End If
End Sub
Private Sub TextBox2_Validating(ByVal sender As Object, _
ByVal e As System.ComponentModel.CancelEventArgs) _
Handles TextBox2.Validating
If TextBox2.Text.Length = 0 Then
ErrorProvider1.SetError(TextBox2, “Please enter some text.”)
Else
ErrorProvider1.SetError(TextBox2, “”)
End If
End Sub
当文本框失去焦点且其中没有数据时,会显示闪烁的错误图标。
4. 使用 SQL 参数
SqlParametersDB 示例展示了如何在数据适配器中使用 SQL 参数。SQL 参数类似于变量,可以在运行时为其赋值而无需更改数据适配器中的 SQL。以下是具体步骤:
1. 创建一个新的 SqlDataAdapter 对象 SqlDataAdapter1,使用 SQL DISTINCT 关键字选择 authors 表中的所有唯一状态:
SELECT DISTINCT state FROM authors
- 从 SqlDataAdapter1 生成数据集对象 DataSet11,并将 state 字段绑定到组合框。
- 创建一个新的数据适配器 SqlDataAdapter2,使用参数化的 SQL 语句:
SELECT au_id, au_lname, au_fname, state FROM authors WHERE (state = ?)
- 从 SqlDataAdapter2 生成新的数据集对象 DataSet21,并将 au_fname 和 au_lname 字段绑定到文本框。
- 当用户点击“获取作者”按钮时,设置 SQL 参数的值:
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
SqlDataAdapter2.SelectCommand.Parameters(“@Param1”).Value = _
ComboBox1.Text
SqlDataAdapter2.Fill(DataSet21)
Label3.Text = (((Me.BindingContext(DataSet21, _
“authors”).Position + 1).ToString + “ of “) _
& Me.BindingContext(DataSet21, “authors”).Count.ToString)
End Sub
通过这种方式,用户可以选择一个州,然后立即看到该州的作者信息。
5. 使用数据关系对象
我们可以使用数据关系对象来关联两个相关的表,而无需将两个表的数据合并到一个数据集中。以 DataRelationDB 示例为例,它通过 pub_id 键关联 pubs 数据库中的 publishers 表和 titles 表。以下是具体步骤:
1. 创建一个新的 Windows Forms 项目,将 SQL 数据适配器 SqlDataAdapter1 拖到主表单中,并使用 SQL 语句
SELECT * FROM publishers
将其连接到 publishers 表。
2. 创建第二个 SQL 数据适配器 SqlDataAdapter2,使用 SQL 语句
SELECT * FROM titles
将其连接到 titles 表。
3. 使用“数据” -> “生成数据集”菜单项,使用两个数据适配器创建数据集 DataSet1 和对象 DataSet11。
4. 创建一个名为 publisherstitles 的数据关系对象,将 publishers 表和 titles 表关联起来:
- 右键单击 DataSet11 并选择“查看架构”。
- 从工具箱中拖动一个“关系”对象到 titles 表,打开“编辑关系”对话框。
- 在对话框中,设置父元素为 publishers 表,子元素为 titles 表,然后点击“确定”。
- 保存 DataSet1.xsd 到磁盘。
5. 创建一个列表框,将其 DataSource 属性设置为 DataSet11,DisplayMember 属性设置为 pub_name,以显示出版商的名称。
6. 创建一个数据网格,将其 DataSource 属性设置为 DataSet11,DataMember 属性设置为 publisherstitles。
7. 在 Form1_Load 事件中添加代码,从两个数据适配器加载两个表到数据集中:
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
SqlDataAdapter1.Fill(DataSet11)
SqlDataAdapter2.Fill(DataSet11)
End Sub
当用户在列表框中选择一个出版商时,程序会在数据网格中显示该出版商的所有书籍信息,无需使用额外的 SQL。
通过以上步骤和代码示例,我们可以在 Visual Basic .NET 中创建数据表单、进行数据验证、使用 SQL 参数和数据关系对象,从而实现与数据库的交互和数据处理。
Visual Basic .NET 数据表单与数据库操作全解析(续)
6. 操作流程总结与流程图展示
为了更清晰地理解上述各项操作的流程,下面为大家梳理并绘制相应的流程图。
6.1 使用数据表单向导创建数据表单流程
- 创建新的 Windows 应用程序 DataFormDB。
- 选择“项目” -> “添加新项”,使用数据表单向导创建 DataForm1.vb。
- 为数据集命名(如 dsAuthors)。
- 选择数据连接(如 pubs 数据库)。
- 选择要添加到数据表单的表(如 authors 表)。
- 指定要显示的表和列。
- 选择显示样式(如单独控件)。
- 点击“完成”创建数据表单。
graph LR
A[创建新 Windows 应用 DataFormDB] --> B[使用数据表单向导创建 DataForm1.vb]
B --> C[为数据集命名 dsAuthors]
C --> D[选择数据连接 pubs 数据库]
D --> E[选择 authors 表]
E --> F[指定显示表和列]
F --> G[选择显示样式(单独控件)]
G --> H[点击完成创建数据表单]
6.2 数据输入表单数据验证流程
- 向项目主表单添加两个文本框,设置 CausesValidation 属性为 True。
- 从工具箱添加 ErrorProvider1 到表单。
-
在 TextBox1 的 Validating 事件中检查输入。
- 若为空,使用 ErrorProvider1.SetError 设置错误文本。
- 若不为空,设置错误文本为空。
- 对 TextBox2 进行相同操作。
graph LR
A[添加文本框并设置 CausesValidation 为 True] --> B[添加 ErrorProvider1 到表单]
B --> C[检查 TextBox1 输入]
C -->|为空| D[设置 ErrorProvider1 错误文本]
C -->|不为空| E[设置 ErrorProvider1 错误文本为空]
B --> F[检查 TextBox2 输入]
F -->|为空| G[设置 ErrorProvider1 错误文本]
F -->|不为空| H[设置 ErrorProvider1 错误文本为空]
7. 代码优化与注意事项
在实际开发中,我们还需要对代码进行优化,并注意一些关键事项,以提高程序的性能和稳定性。
7.1 代码优化建议
- 异常处理 :在数据库操作中,异常处理至关重要。例如在更新数据源时,捕获异常并进行适当处理,避免程序崩溃。
Public Sub UpdateDataSource(ByVal ChangedRows As DataFormDB.dsAuthors)
Try
If (Not (ChangedRows) Is Nothing) Then
Me.OleDbConnection1.Open()
OleDbDataAdapter1.Update(ChangedRows)
End If
Catch updateException As System.Exception
' 记录日志或显示友好提示
System.Diagnostics.Debug.WriteLine($"更新数据源出错: {updateException.Message}")
Finally
Me.OleDbConnection1.Close()
End Try
End Sub
-
资源管理
:确保及时释放不再使用的资源,如数据库连接。在上述代码中,使用
Finally块确保连接在操作完成后关闭。
7.2 注意事项
- 数据验证 :在进行数据验证时,要考虑各种边界情况,如输入长度、数据类型等。同时,要确保验证逻辑的一致性和完整性。
- SQL 参数 :使用 SQL 参数时,要注意参数的命名和赋值,避免 SQL 注入攻击。例如在设置 SQL 参数时,确保参数值的来源可靠。
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
' 确保 ComboBox1.Text 来源可靠
SqlDataAdapter2.SelectCommand.Parameters("@Param1").Value = ComboBox1.Text
SqlDataAdapter2.Fill(DataSet21)
Label3.Text = (((Me.BindingContext(DataSet21, _
"authors").Position + 1).ToString + " of ") _
& Me.BindingContext(DataSet21, "authors").Count.ToString)
End Sub
8. 实际应用案例分析
为了更好地理解上述技术在实际中的应用,下面为大家分析一个简单的实际应用案例。
假设我们要开发一个图书管理系统,需要实现以下功能:
- 管理员可以添加、编辑和删除作者信息。
- 用户可以根据作者所在州筛选作者信息。
- 系统能够显示出版商及其出版的书籍信息。
8.1 功能实现步骤
- 创建数据表单 :使用数据表单向导创建作者信息的数据表单,实现添加、编辑和删除作者信息的功能。
- 使用 SQL 参数 :在筛选作者信息时,使用 SQL 参数根据用户选择的州进行筛选。
- 使用数据关系对象 :关联出版商表和书籍表,显示出版商及其出版的书籍信息。
8.2 代码示例
以下是部分代码示例,展示如何实现上述功能:
' 添加作者信息
Private Sub btnAddAuthor_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnAddAuthor.Click
Try
Me.BindingContext(objdsAuthors, "authors").EndCurrentEdit()
Me.BindingContext(objdsAuthors, "authors").AddNew()
Catch eEndEdit As System.Exception
System.Windows.Forms.MessageBox.Show(eEndEdit.Message)
End Try
Me.objdsAuthors_PositionChanged()
End Sub
' 根据州筛选作者信息
Private Sub btnFilterAuthors_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnFilterAuthors.Click
SqlDataAdapter2.SelectCommand.Parameters("@Param1").Value = ComboBox1.Text
SqlDataAdapter2.Fill(DataSet21)
Label3.Text = (((Me.BindingContext(DataSet21, _
"authors").Position + 1).ToString + " of ") _
& Me.BindingContext(DataSet21, "authors").Count.ToString)
End Sub
' 显示出版商及其书籍信息
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
SqlDataAdapter1.Fill(DataSet11)
SqlDataAdapter2.Fill(DataSet11)
End Sub
通过以上案例分析,我们可以看到如何将 Visual Basic .NET 中的数据表单、数据验证、SQL 参数和数据关系对象等技术应用到实际项目中,实现与数据库的交互和数据处理。
9. 总结
本文详细介绍了在 Visual Basic .NET 中创建数据表单、进行数据验证、使用 SQL 参数和数据关系对象的方法和步骤。通过实际代码示例和操作流程展示,帮助大家更好地理解和掌握这些技术。同时,我们还对代码优化和注意事项进行了讨论,并通过实际应用案例分析展示了这些技术在实际项目中的应用。希望大家能够通过本文的学习,在实际开发中灵活运用这些技术,实现高效、稳定的数据库操作。
在实际开发过程中,大家可以根据具体需求对代码进行调整和扩展,不断优化程序性能和用户体验。同时,要注意数据安全和资源管理,确保程序的稳定性和可靠性。相信通过不断实践和学习,大家能够在 Visual Basic .NET 开发领域取得更好的成果。
超级会员免费看
14

被折叠的 条评论
为什么被折叠?



