我有一个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)
此异常是什么意思?
答案 0 :(得分:5)
好吧,如果它在这条线上失败了:
Me.OverTableAdapter.Adapter.SelectCommand.CommandTimeout = 60000
然后:
Me.OverTableAdapter
是Nothing
Me.OverTableAdapter.Adapter
是Nothing
Me.OverTableAdapter.SelectCommand
是Nothing
(你向我们展示的第二行是无关紧要的,因为你没有那么远。)
我们无法根据您向我们展示的内容进行分析,但您应该能够在调试器中或通过添加诊断日志记录来查找。
一旦你解决了为什么它失败了,修复它应该很容易 - 几乎可以肯定只是正确地初始化它。将此适配器的初始化与其他适配器的初始化进行比较。
答案 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
现在,您可以在创建适配器实例后使用此属性。