2012-10-23 6 views
0

J'ai ce code que j'utilise dans Visual Studio 2012 pour remplir une liste déroulante à partir de données dans une base de données SQL. Chaque fois que j'essaie de le déboguer, j'obtiens l'exception à la boucle for d'une exception de référence nulle. J'espère que quelqu'un pourra m'aider à comprendre ce que je manque ici.Connexion OLEDB Visual Studio 2012

Private Sub StationList_Click (expéditeur comme objet, e EventArgs Comme) Poignées 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 

Répondre

0

Il est évident que je ne peux pas voir votre base de données ou les enregistrements, il est de tirage, mais je voudrais essayer d'ajouter ceci à elemenate la possibilité d'essayer de faire référence à une valeur nulle:

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 
1

Changer le nom de la table de données « StationEquipDataSet » à « StationEquipment » vous désadaptation le nom de la table, c'est à l'origine de la référence null lorsque vous essayez de accéder à la rangée s de cette table, car il n'existe pas

+0

J'ai essayé d'y entrer et l'ensemble de données me donne le Afin d'évaluer une propriété indexée, la propriété doit être qualifiée et les arguments doivent être explicitement définis par l'utilisateur. Je pense alors qu'il y a une connexion propre à la base de données mais pas aux enregistrements dans la table. Je ne suis pas sûr de savoir comment corriger cela – user1038895

+0

Changer les noms ne fonctionnait pas. – user1038895

0

Je crois que vous avez mal le nom dans l'expression Mydataset.Tables("StationEquipDataSet").

Pour savoir si l'ensemble de données contient vraiment votre table, et de savoir quel serait le nom correct à utiliser comme index, vous pouvez essayer d'insérer ces lignes juste avant la boucle:

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

Cela écrira par exemple la quantité de tables et les noms de tables à la console.