0

Visual Studio 2012でSQLデータベースのデータからコンボボックスを作成するために使用しているこのコードがあります。デバッグしようとするたびに、null 参照例外の for ループで例外が発生します。ここで何が欠けているのかを誰かが理解するのを手伝ってくれることを願っています。

Private Sub StationList_Click(sender As Object, e As EventArgs) StationList.Click を処理します

    Dim cn As New OleDbConnection
    cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\hendera2\Desktop\StationEquip.accdb"
    Dim Mystr As String = "SELECT DISTINCT Location FROM StationEquipment"
    Dim Myadapter As OleDbDataAdapter
    Dim Mydataset As New DataSet()



    Try
        cn.Open()

        Myadapter = New OleDbDataAdapter(Mystr, cn.ConnectionString)
        Myadapter.Fill(Mydataset, Mystr)




        Dim dr As DataRow

        For Each dr In Mydataset.Tables("StationEquipDataSet").Rows
            Me.StationList.Items.Add(dr("Location"))
        Next

        cn.Close()
    Catch ex As Exception
        MsgBox("Cannot Open connection")
    End Try
End Sub
4

3 に答える 3

1

「StationEquipDataSet」データテーブル名を「StationEquipment」に変更してくださいテーブル名が一致していません。このテーブルの行にアクセスしようとすると、null 参照が発生します。存在しないためです

于 2012-10-23T18:11:24.207 に答える
0

Mydataset.Tables("StationEquipDataSet")表現で名前を間違えたと思います。

データセットに実際にテーブルが含まれているかどうかを確認し、インデックスとして使用する正しい名前を確認するには、ループの直前に次の行を挿入してみてください。

    Console.WriteLine(MyDataSet.Tables.Count);
    for (var i = 0; i > MyDataSet.Tables.Count;i++)
    {
        Console.WriteLine(MyDataSet.Tables[0].TableName);
    }

これにより、たとえば、テーブルの量とテーブル名がコンソールに書き込まれます。

于 2014-01-09T18:36:35.420 に答える
0

明らかに、データベースやそれがプルしているレコードを見ることはできませんが、null 値を参照しようとする可能性を高めるためにこれを追加してみます。

If Mydataset.Tables("StationEquipDataSet").Rows.Count > 0 Then
    For Each dr In Mydataset.Tables("StationEquipDataSet").Rows
        Me.StationList.Items.Add(dr("Location"))
    Next
End If
于 2012-10-23T18:08:02.120 に答える