VB.NET System.NullReferenceException

时间:2013-03-12 14:21:56

标签: vb.net dataset nullreferenceexception

我有一个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)

此异常是什么意思?

2 个答案:

答案 0 :(得分:5)

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

Me.OverTableAdapter.Adapter.SelectCommand.CommandTimeout = 60000

然后:

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

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

我们无法根据您向我们展示的内容进行分析,但您应该能够在调试器中或通过添加诊断日志记录来查找。

一旦你解决了为什么它失败了,修复它应该很容易 - 几乎可以肯定只是正确地初始化它。将此适配器的初始化与其他适配器的初始化进行比较。

答案 1 :(得分:2)

此例外的原因是SelectCommand将从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

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