3

10 の異なるデータベースから複数のデータセットを構築する VB.NET プログラムがあります。

私はこの例外を取得しています:

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

(あなたが私たちに示した 2 行目は、そこまで進んでいないため、無関係です。)

表示された内容に基づいて判断することはできませんが、デバッガーで確認するか、診断ログを追加することで確認できるはずです。

失敗した理由を突き止めたら、修正は簡単です。ほとんどの場合、適切に初期化するだけです。このアダプターの初期化を他のアダプターの初期化と比較してください。

于 2013-03-12T14:25:11.010 に答える
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

これで、アダプタのインスタンスを作成した後、代わりにこのプロパティを使用できます。

于 2013-03-12T14:32:35.227 に答える