3

我有一个 VB.NET 程序,它从 10 个不同的数据库构建多个数据集。

我得到这个例外:

System.NullReferenceException: Object referenced not set to an 
instance of an object:

此错误发生在以下几行:

Me.OverTableAdapter.Adapter.SelectCommand.CommandTimeout = 60000
Me.OverTableAdapter.Fill(Me.Dataset.Over, TodayDt, TodayEnd)

这个异常是什么意思?

4

2 回答 2

5

好吧,如果它在这条线上失败:

Me.OverTableAdapter.Adapter.SelectCommand.CommandTimeout = 60000

然后:

  • Me.OverTableAdapterNothing
  • Me.OverTableAdapter.AdapterNothing
  • Me.OverTableAdapter.SelectCommandNothing

(您向我们展示的第二行无关紧要,因为您还没有走那么远。)

根据您向我们展示的内容,我们无法判断,但您应该能够在调试器中或通过添加诊断日志来找出答案。

一旦你弄清楚它失败的原因,修复它应该很容易 - 几乎可以肯定只是正确初始化它的问题。将此适配器的初始化与其他适配器的初始化进行比较。

于 2013-03-12T14:25:11.010 回答
2

出现此异常的原因是SelectCommandwill 是TableAdapter.Fill从而不是之前初始化的。Timeout因此,当您尝试更改NullReferenceException.

您可以TableAdapter通过在与designer.vb/designer.cs.

Namespace DataSet1TableAdapters

    Partial Public Class OverTableAdapter
        Public Property CommandTimeout As System.Int32
            Get
                If Me.CommandCollection Is Nothing OrElse Me.CommandCollection.Length = 0 Then
                    Return -1
                Else
                    Return Me.CommandCollection(0).CommandTimeout
                End If
            End Get
            Set(value As System.Int32)
                If Not Me.CommandCollection Is Nothing Then
                    For Each cmd In Me.CommandCollection
                        cmd.CommandTimeout = value
                    Next
                End If
            End Set
        End Property
    End Class

End Namespace

现在,您可以在创建适配器实例后使用此属性。

于 2013-03-12T14:32:35.227 回答