Data Reader mit GridView Problem

Hallo.

Folgendes Problem:

Ich habe einen Data Reader, der Werte aus einem Editfeld ausliest, in die DB schreibt und in einem GridView angezeigt werden soll.

Allerdings wird nur der letzte Wert aus der DB in dem GridView angezeigt.

Es kommt keine Fehlermeldung und die Werte werden in die DB eingetragen.

Es liegt nur an der Ausgabe im GridView.

Vielleicht habt ihr einen Tipp!?!?

Codeschnipsel:

Protected Sub CaOtxt_TextChanged(ByVal sender As Object, ByVal e As EventArgs) Handles CaOtxt.TextChanged
Dim connStr As String
Dim command As New OdbcCommand
connStr = Session(“conString”
)
Dim conn As New OdbcConnection(connStr)
command.Connection = conn

Dim reader As OdbcDataReader
Dim zahl As Integer
Dim zahl2 As Integer
Dim prop As Integer
Dim polo As Integer

Try
conn.Open()
command.CommandText =
“select …’”
zahl2 = command.ExecuteScalar() + 3
command.CommandText =
“select …’”
zahl = command.ExecuteScalar()
command.CommandText =
“select nextval(…)”
prop = command.ExecuteScalar()
command.CommandText =
“select nextval(…)”
polo = command.ExecuteScalar()
command.CommandText =
“select Insertfunc(…)”
command.ExecuteNonQuery()
command.CommandText = "select …& zahl2 & “’”
reader = command.ExecuteReader()
GridView1.DataSource = reader
GridView1.DataBind()
reader.Close()
conn.Close()

Catch ex As Exception
End Try

End Sub

  1. CommandBuilder verwenden
  2. den kompletten Select Query vom GridView anzeigen. Funktioniert dieser, wenn Du ihn direkt in der Datenbank ausführst?
  3. Du fängst ja mit Try die Exceptions ab. Es ist aber aus Deinem Snippet nicht ersichtlich, was Du im Catch Block machst bzw. ob du überhaupt einen hast und hier irgendetwas machst. Wird evtl. eine Exception geworden welche Du einfach nur nicht siehst?


    Tipp am Ende: Bei Datenbanken sollte man eigentlich using verwenden. Zumindest aber ein try/catch/finally

Hallo. Danke für die schnelle Hilfe mal wieder.

Zu 1.:
Den CommandBuilder finde ich nicht und kenne ich auch nicht. Konnte ihn noch nicht mal in der Hilfe vom Visual Studio finden.

Zu 2.:
Wie lasse ich den kompletten Query im GridView anzeigen?
Ja, direkt in der DB funktioniert der Query

Zu 3.:
Mit der Catch ex As Exception wars das auch schon mit der Außnahmebehandlung.
Im Debugger kommt aber auch keine Meldung. Er springt also nicht zur Exception.

using?? Kenne ich ebenfalls nicht. Bin noch ein absoluter Anfänger was das proggen & Postgresql angeht.

  1. Unter CommandBuilder versteht man folgendes:
int id = 123;
string test = "hallowelt";
OdbcCommand c = new OdbcCommand("SELECT * FROM test WHERE id = @id OR string = @stringvalue");
c.Parameters.AddWithValue("@id", Wert);
c.Parameters.AddWithValue("@strinvalue", test);
...

Wobei hier das “@”-Zeichen sich von DB zu DB unterscheiden kann.
Using: using-Anweisung (C#)

Ansonsten seh ich jetzt auf den ersten Blick auf keinen Fehler. Die Abfrage liefert auch ein Ergebnis zurück? Was du noch probieren könntest wäre vielleicht die Daten in ein DataSet zu lesen und dieses dann an die GridView zu binden.

Guten Morgen.

Danke für den Tipp mit dem Command Builder.

Ich werde ihn mal ausprobieren.

Das DataSet habe ich auch schon getestet. Ebenfalls erfolglos.

Wie gesagt, die SQL Statements sind fehlerfrei. In der DB werden die Datensätze eingetragen :frowning:

Das einzige was mir spontan noch einfällt ist, den Reader nicht zu schließen (Reader.Close()). Ich weiß nicht geneau wie das GridView mit diesem umgeht, evtl. braucht er diesen weiterhin geöffnet, etc. Wäre ein Versuch wert, ansonsten so auf die schnelle keine Ahnung.

Kleiner Tip (auch wenn er nicht gern gehört wird) diese ganzen
Komponenten wie GridView sind nett und schön, beim definieren
der SQL-Abfragen gehe immer her und baue Sie Dir von Hand
zusammen, am besten Du testest es vorher noch im PGAdmin
bevor Du es in Visual Studio verwendet. Wenn Du weißt das
es via PGAdmin sauber ausgeführt wird und deine Query
auf der System.Console ebenfalls die korrekten Werte anzeigt,
dann ist es ein Komponentenproblem von GridView und Du
musst in der Doku dazu oder in den Microsoft Foren suchen.

Manchmal hilft es aber auch, einfach die ganzen automated
Features bewusst nicht zu verwenden, sondern die Query
Results vorher in Collections oder Arrays zu verfrachten und
dann einfach direkt 1:1 an das interne Array des GridViews
zu zuweisen, dann haben sämmtliche Automatismen die
irgendwas schlaues vorher versuchen keine Chance noch
dazwischen zu funken und es geht meist gut.