Anfängerfrage: wie kann ich über Adapter einen einzelnen Wert holen

09/10/2009 - 12:03 von Markus Backhaus | Report spam
Sorry für wahrscheinlich dumme Frage.

Ich kriege die Daten mit dem DataAdapter ein ein Control:

Dim dt As New DataTable
Dim ds As New DataSet
Dim da As SqlDataAdapter
Dim bs As New BindingSource
Dim SQLQuery As String = ""

ds.Tables.Add(dt)

SQLQuery = "SELECT Name FROM Kunden WHERE KundenID = 19"
da = New SqlDataAdapter(SQLQuery, MeinConString)
da.Fill(dt)

bs.DataSource = dt
Me.DataGrid.DataSource = dt

Meine Frage: kann ich irgendwie direkt in eine String Variable den
Kundennamen holen, ohne Umweg über DataGrid?
Woher kann ich also diesen Wert holen - aus dem DataSet oder DataAdapter und
wie?
Danke!
Markus
 

Lesen sie die antworten

#1 Peter Götz
09/10/2009 - 12:32 | Warnen spam
Hallo Markus,

Ich kriege die Daten mit dem DataAdapter ein ein Control:

Dim dt As New DataTable
Dim ds As New DataSet



Warum erstellst Du ein DataSet, wenn Du doch offenbar
nur eine einzige Tabelle (DataTable) darin verwaltest?

Dim da As SqlDataAdapter
Dim bs As New BindingSource
Dim SQLQuery As String = ""

ds.Tables.Add(dt)

SQLQuery = "SELECT Name FROM Kunden
WHERE KundenID = 19"

da = New SqlDataAdapter(SQLQuery, MeinConString)
da.Fill(dt)

bs.DataSource = dt
Me.DataGrid.DataSource = dt

Meine Frage: kann ich irgendwie direkt in eine String Variable
den Kundennamen holen, ohne Umweg über DataGrid?



Überlege doch einfach mal, wohin der DataAdapter Deine
aus der DB stammenden Daten hingeschrieben hat.

Woher kann ich also diesen Wert holen - aus dem DataSet
oder DataAdapter und wie?



Der DataAdapter hat die Daten aus der DB in die DataTable,
welche Du in Deinem DataSet erstellt hast, geschrieben.
Also sind die Daten jetzt in dieser DataTable:

Dim DT as DataTable
DT = ds.Tables(0)

Und aus dieser DataTable kannst Du Dir die Daten
direkt holen. Da Dein Select-Statement nur einen
einzigen Datensatz mit der KundenID = 19 holt, enthàlt
Deine DataTable nur einen einzigen Datensatz (DataRow).

Dim Text as String
Dim DR as DataRow

DR = DT.Rows(0)

' Inhalt des dritten Feldes dieser DataRow:
Text = DR.Item(2).ToString

Das funktioniert so aber nur, wenn Du in der DataTable
nicht mehrere DataRows hast und Deine Daten im DataGrid
nicht durch einen Mausklick auf einen Spaltenkopf in eine
andere Sortierung als die der DataTable gebracht worden
sind. In diesem Fall wàre z.B. der Datensatz in der 3. Zeile des
DataGridView nicht unbedingt die DataRow mit dem RowIndex
2 in Deienr DataTable.
Dazu solltest Du aber erst mal die Zusammenhànge
zwischen DataTable und DataView mit einem zur DataView
gehörenden CurrencyManager vestanden haben.

Für den Einstieg würde ich Dir empfehlen, statt mit komplexen
Objekten wie DataSet und Bindingsource, erst mal mit den einfachen,
grundlegenden Objekten, wie DataTable, DataView und
CurrencyManager, die von diesen komplexen Objekten
gekapselt werden, zu arbeiten und zu verstehen. Das würde Dir
in der Folge auch das Verstàndnis der Arbeitsweise von
DataSet und BindingSource ganz sicher sehr erleichtern.

Unter

www.gssg.de -> Visual Basic -> VB.net

in den Rubriken

-> Datenbank
-> DataGridView
-> DataTable / DataView / CurrencyManager

findest Du eine Reihe von Beispielen, welche Dir die
Arbeitsweise von DataTable, DataView, CurrencyManager,
DataAdapter sowie den verschiedenen CommandObjekten
verdeutlichen.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen