对try感到困惑……但vb除外[关闭]

问题描述 投票:-2回答:1

我正在研究一个项目,该项目允许用户按名称搜索排行榜数据库。鼓励我使用try ... except语句来停止错误(如果数据库不包含该名称),但是我不熟悉如何使用它,因此遇到了问题。请问我哪里出了问题以及如何纠正它?我希望记录显示搜索的名称,或者如果不存在该名称,则不显示任何记录。


    Imports System.Data.OleDb
    Public Class FrmAllResults
        Dim CtnConnection As OleDbConnection
        Dim DsDataset As New DataSet()
        Dim StrConnectionString As String = vbNull
        Dim StrSql As String
    Private Sub FrmAllResults_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            StrConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=..\..\..\DbIteration2Database.mdb"
            StrSql = "select * from Leaderboard"
            CtnConnection = New OleDbConnection(StrConnectionString)
            CtnConnection.Open()
            Dim AdptOleDbAdapter As OleDbDataAdapter = New OleDbDataAdapter(StrSql, CtnConnection)
            AdptOleDbAdapter.Fill(DsDataset)
            AdptOleDbAdapter.Dispose()
            LblAllResults.Text = DsDataset.Tables(0).ToString
        End Sub
        Private Sub BtnSearch_Click(sender As Object, e As EventArgs) Handles BtnSearch.Click
            Dim StrNameSearched As String = TxtName.Text
            Dim StrLeaderboardEntry As String
            Try
                StrLeaderboardEntry = (DsDataset.Tables(0).Rows(0).Item(StrNameSearched).ToString)
            Catch ex As Exception
                StrLeaderboardEntry = vbNull
            End Try
            LblAllResults.Text = StrLeaderboardEntry
        End Sub
    End Class

database vb.net try-catch
1个回答
1
投票

您可能对此感到困惑,因为这是对异常处理的错误使用。 (并且鼓励您这样做的人都误导了您。)异常是代码中意外的错误。

例如,如果代码根本无法连接到数据库,那么它可能会生成异常,并且应用程序应该能够从该异常中恢复。在数据中找不到匹配的记录也不例外。这不是错误。这只是一个简单的“未找到结果”的情况。

问题是找到了代码[[assumes结果,并且在此处人为地产生了错误:

StrLeaderboardEntry = (DsDataset.Tables(0).Rows(0).Item(StrNameSearched).ToString)
如果未找到任何记录,则Rows将为空,因此将导致错误,因为代码

假定

Rows永远不会为空。该假设不正确,因此请更改假设。例如:If DsDataset.Tables(0).Rows.Count > 0 Then StrLeaderboardEntry = (DsDataset.Tables(0).Rows(0).Item(StrNameSearched).ToString) Else ' No records were found. Notify the user in some way. End If
这找到了另一个很好的例外示例。如果查询成功,那么我至少希望Tables总是有一个元素,这样的假设要安全得多,如果它为假,则确实发生了意外情况(异常)。但是Rows在正常情况下在搜索中肯定可以为空,因此代码应期望并处理。

作为一般建议,切勿将Try/Catch用于可以用If/Else处理的内容。

© www.soinside.com 2019 - 2024. All rights reserved.