2010-11-29 13 views
0

Ich arbeite zum ersten Mal an einer Mobile 6 Classic Telefonanwendung und habe Probleme mit dem SqlCeResultSet. Ich versuche, ein Datagrid mit diesem zu füllen:Warum gibt mein SqlCeResultSet nur eine Zeile zurück?

Private Sub LookUpRoutes() 
    Dim dir As String = Path.GetDirectoryName(Reflection.Assembly _ 
     .GetExecutingAssembly().GetName().CodeBase) 

    Dim Sql As String = "SELECT RouteID, Name, Description FROM Routes " & _ 
     "Where IsDeleted = 0" 

    Using con As SqlCeConnection = New SqlCeConnection(_ 
     String.Format("Data Source = '{0}\database\RouteTracker.sdf'", dir)) 

     con.Open() 

     Using cmd As SqlCeCommand = New SqlCeCommand(Sql, con) 
      cmd.CommandType = CommandType.Text 

      Dim resultSet As SqlCeResultSet = _ 
       cmd.ExecuteResultSet(ResultSetOptions.Scrollable) 
      dgRoutes.DataSource = resultSet 
     End Using 
    End Using 
End Sub 

Jedoch bekomme ich nur eine gefüllte Reihe davon zurück. Die restlichen Zeilen zeigen in den Feldern statt der Daten x (Bild unten).

alt text

Was mache ich falsch?

Antwort

1

Meine beste Schätzung ist, dass dgRoutes aktiv das resultSet verwendet, das aktiv die offene Verbindung verwendet. Vermutlich werden die Ergebnisse nur dann abgefragt, wenn sie in die Ansicht gerollt werden (ResultSetOptions.Scrollable). Daher muss die Verbindung offen bleiben, damit bei Bedarf zusätzliche Daten abgerufen werden können.

0

Ich bin nicht sicher, warum dies funktioniert, aber ich habe die Verwendung con los wie SqlCeConnection = New SqlCeConnection und nur con.open verwendet und Widerstand dann den Drang, einen con.close, um den Code hinzuzufügen, da tut es macht so nicht wieder arbeiten.

Kann mir jemand mitteilen, warum ich die Verbindung nicht schließen und entsorgen kann, ohne die Funktionalität zu beeinträchtigen? Gibt es eine andere Art und Weise?