0

我知道我在这里是个白痴,我就是搞不定。但我正在尝试从 vb.net 数据库中取回一些数据。它因对象引用未设置为对象错误的实例而崩溃。在代码运行之前,它说在设置变量之前正在使用该变量,但我不知道如何。代码:

  Private taNotifications As dsDataTableAdapters.NotificationsTableAdapter = New dsDataTableAdapters.NotificationsTableAdapter 

   Dim notification As dsData.NotificationsDataTable = taNotifications.GetDataByClientID(userrow.UserID)

                If notification.Rows.Count > 0 Then

                    Dim notificationrow As dsData.NotificationsRow
                    Dim forwardURL As String = notificationrow.ForwardLocation

                End If

它倒在Dim forwardURL As String = notificationrow.ForwardLocation

4

2 回答 2

5

问题是您从未在 if 语句中实例化 notificationRow。你已经声明了它,但它不属于任何东西。在对该对象执行任何操作之前,您需要进行分配或循环遍历您的行:

Dim notificationrow As dsData.NotificationsRow ' this is not instantiated
Dim forwardURL As String = notificationrow.ForwardLocation

在这种情况下,您真正​​想要的是:

For Each notificationRow As dsData.NotificationRow In notification

    Dim forwardURL As String = notificationRow.ForwardLocation        
    ' Do Something

Next

如果您只有一行并且您知道您只有 1 或 0 行,那么您可以通过执行以下操作来使用您的 if 语句:

If notification.Rows.Count > 0 Then

    Dim notificationrow As dsData.NotificationsRow = _
        CType(notification.Rows(0), dsData.NotificationsRow)

    Dim forwardURL As String = notificationrow.ForwardLocation

End If

编辑:在上面的代码中,我最初只有notification.Rows(0). 这将产生一个 DataRow 对象,但它不会是强类型的。您需要执行CType我添加的操作才能使用自定义属性ForwardLocation

于 2012-06-13T15:07:57.437 回答
1

你从来没有设置notificationrow任何东西。你的意思是这样设置吗?

Dim notificationrow As dsData.NotificationsRow = CType(notification.Rows(0), dsData.NotificationsRow)
于 2012-06-13T15:08:04.483 回答