55、Visual Basic .NET 数据表单与数据库操作全解析

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
  1. 从 SqlDataAdapter1 生成数据集对象 DataSet11,并将 state 字段绑定到组合框。
  2. 创建一个新的数据适配器 SqlDataAdapter2,使用参数化的 SQL 语句:
SELECT au_id, au_lname, au_fname, state FROM authors WHERE (state = ?)
  1. 从 SqlDataAdapter2 生成新的数据集对象 DataSet21,并将 au_fname 和 au_lname 字段绑定到文本框。
  2. 当用户点击“获取作者”按钮时,设置 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 使用数据表单向导创建数据表单流程
  1. 创建新的 Windows 应用程序 DataFormDB。
  2. 选择“项目” -> “添加新项”,使用数据表单向导创建 DataForm1.vb。
  3. 为数据集命名(如 dsAuthors)。
  4. 选择数据连接(如 pubs 数据库)。
  5. 选择要添加到数据表单的表(如 authors 表)。
  6. 指定要显示的表和列。
  7. 选择显示样式(如单独控件)。
  8. 点击“完成”创建数据表单。
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 数据输入表单数据验证流程
  1. 向项目主表单添加两个文本框,设置 CausesValidation 属性为 True。
  2. 从工具箱添加 ErrorProvider1 到表单。
  3. 在 TextBox1 的 Validating 事件中检查输入。
    • 若为空,使用 ErrorProvider1.SetError 设置错误文本。
    • 若不为空,设置错误文本为空。
  4. 对 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 功能实现步骤
  1. 创建数据表单 :使用数据表单向导创建作者信息的数据表单,实现添加、编辑和删除作者信息的功能。
  2. 使用 SQL 参数 :在筛选作者信息时,使用 SQL 参数根据用户选择的州进行筛选。
  3. 使用数据关系对象 :关联出版商表和书籍表,显示出版商及其出版的书籍信息。
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 开发领域取得更好的成果。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值