0

我有这段代码,我在 Visual Studio 2012 中使用它来从 sql 数据库中的数据填充组合框。每次我尝试调试它时,我都会在空引用异常的 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”您与表名称不匹配,这导致当您尝试访问此表的行时出现空引用,因为它不存在

于 2012-10-23T18:11:24.207 回答
0

显然我看不到您的数据库或它正在提取的记录,但我会尝试添加它以增加尝试引用空值的可能性:

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 回答
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 回答