Daten von Datasource in Dataset/Datatable?

daDom

Erfahrenes Mitglied
Hallöle zusammen!

Sitze gerade an einem Projekt, wo es nötig ist, die maximale ID einer Tabelle auszulesen.
Mit "SELECT max(ID) FROM ROOM" klappt das auch so weit.
Problem bei der Sache ist: ich brauche diesen Wert in VS2005 selbst als Variable(VB).

Ich wollte das ganze schon auf die unsaubere Variante lösen; GridView erstellt, Select Befehl(siehe oben) an SQLDataSource gesendet, Maximale ID wird in der Gridview angezeigt.
Problem: 1. Wie gesagt; unsauber. 2.: wie komm ich an die ID ran?

Muss ich dazu vielleicht von der DataSource die Daten in ein DataSet/DataTable umwandeln?
Ich kenn mich da gar net aus! In VB6 war das alles viel einfacher!!

Danke für Eure Hilfe!
dom
 

Norbert Eder

Erfahrenes Mitglied
Was du brauchst ist (und das ist jetzt abhängig von der zugrundeliegenden Datenbank) eine Datenbank-Connection (im Falle eines MS SQL Servers eine SqlConnection). Dazu gibt es dann den passenden Command (Im Falle eines MS SQL Server einen SqlCommand). Dieser Command besitzt eine Methode ExecuteScalar, welche genau einen Wert zurückliefert, was genau das darstellt, was du möchtest.

Verwendest du beispielsweise OleDb, dann nennen sich die Teile OleDbConnection und OleDbCommand. Bei Verwendung von ODBC, nun, einfach :)

Für MySql musst du einen eigenen Provider installieren. Einfach mal den Link angucken und schon kannst damit etwas anfangen ;-)
 

ksk

Erfahrenes Mitglied
Hy!

Für einen SQL-Server, könntest du es so probieren
Code:
        Dim dTable As New DataTable
        Dim strQuerySex As String = "select MAX(ID) from ROOM'"
        Dim con As New SqlConnection("Server=(local);Database=ROOM;" & _
                            "User=xxx;Password=xxx;Integrated Security=False")

        Dim dAdapter As New SqlDataAdapter(strQuery, con)

        Try
            con.Open()
            dAdapter.Fill(dTable)

        Catch ex As Exception
            'Hie kann die Fehlermeldung entweder in eine LogDatei schreiben oder als MsgBox ausgeben.
        Finally
            If con.State = ConnectionState.Open Then con.Close()
        End Try
Wenn du das in einer Funktion hast dann brauchst es mit "Return dTable"

Wenn due es in einer DataTable hast kannst du eine TypenKonvetierung machen, wie z.B.: so
Code:
dim gewünschteID as integer

gewünschteID = Cint(dTable.Rows(0).Item("SpaltenName"))
da du nur eine Zeile von der DB zurückbeommst, überprüfst du die Zeile 0.
In der Zeile 0 rufst du den wert von der Spallte, welches die gewünschte ID beinhaltet.

Falls du für die Tabelle eine Klasse erstellt hast, sprich du willst OO arbeiten, dann kannst du das eben so machen, wi bsp. so in etwa
Code:
gewünschteID = Cint(Ctype(dTable.Rows(0).Item("SpaltenName"), deineKlasse).pID)
Wobei die Eigenschaft "pID", eine Property in deiner Klasse definiert.


Gruß
ksk
 

Neue Beiträge