我有一个从数据库中检索CurrentYear year_now
和NextYear year_next
的表单。它给了我错误'IndexOutOfRangeException未处理'bcoz我认为没有要检索的行。而我想做的是,即使表中没有数据,我仍然可以加载表单并给我一个空值来显示。我尝试了所有我知道的工作,但我无法解决问题。无论如何都要重新编码。
Sub LoadSchoolYear()
Dim conn1 As New MySqlConnection("server=localhost; userid=root; password=root; database=uecp_cens")
Dim dAdapter1 As New MySqlDataAdapter("SELECT year_now, year_next FROM uecp_cens.tblschoolyear", conn1)
Dim dTable1 As New DataSet
Try
dAdapter1.Fill(dTable1, "uecp_cens")
lblYearNow.Text = dTable1.Tables("uecp_cens").Rows(0).Item(0).ToString
lblYearNext.Text = dTable1.Tables("uecp_cens").Rows(0).Item(1).ToString
Catch ex As MySqlException
MsgBox(ex.Message)
Finally
conn1.Dispose()
End Try
End Sub
感谢任何帮助。
答案 0 :(得分:0)
如果您提到的表中没有行,则会出现该错误。请检查Rows.Count
:
Dim yearNow As String = Nothing
Dim yearNext As String = Nothing
If dTable1.Tables("uecp_cens").Rows.Count > 0 Then
yearNow = dTable1.Tables("uecp_cens").Rows(0).Item(0).ToString()
yearNext = dTable1.Tables("uecp_cens").Rows(0).Item(1).ToString()
End If
lblYearNow.Text = yearNow
lblYearNext.Text = yearNext
如果数据库中的字段为NULL
,则为DBNull.Value
,如果您使用Rows(0).Item(0).ToString()
,则会出现异常。然后使用DataRow.IsNull
进行检查:
If dTable1.Tables("uecp_cens").Rows.Count > 0 Then
Dim row = dTable1.Tables("uecp_cens").Rows(0)
yearNow = If(row.IsNull(0), Nothing, row.Item(0).ToString())
yearNext = If(row.IsNull(1), Nothing, row.Item(1).ToString())
End If