VB.NET: Datenbankzugriff über DataReader

Kann mir jemand sagen, wo im untenstehenden Code der Fehler liegt?
Beim Aufruf von ExecuteReader erhalte ich die Fehlermeldung:„An unhandled exception of type ‚System.NullReferenceException‘ occurred in system.data.dll Additional information: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.“

Dim Conn As OleDbConnection = New OleDbConnection(CONNSTRING)
Dim Com As OleDbCommand = New OleDbCommand
Dim DR As OleDbDataReader = Nothing

Conn.Open()

Com.Connection = Conn
Com.CommandText = „SELECT * FROM Contact“
DR = Com.ExecuteReader

DR.Close()
Conn.Close()

Hallo,

Kann mir jemand sagen, wo im untenstehenden Code der Fehler
liegt?
Beim Aufruf von ExecuteReader erhalte ich die
Fehlermeldung:„An unhandled exception of type
‚System.NullReferenceException‘ occurred in system.data.dll
Additional information: Der Objektverweis wurde nicht auf eine
Objektinstanz festgelegt.“

Normalerweise kannst Du die Zeile ermitteln, in der der Fehler auftritt. Anhand des Codebeispieles kann ich mir nur vorstellen, dass

Com.ExecuteReader

als Ergebnis

Nothing

liefert, und das Programm sich dann bei

DR.Close()

verabschiedet.

Dim Conn As OleDbConnection = New OleDbConnection(CONNSTRING)
Dim Com As OleDbCommand = New OleDbCommand
Dim DR As OleDbDataReader = Nothing

Conn.Open()

Com.Connection = Conn
Com.CommandText = „SELECT * FROM Contact“
DR = Com.ExecuteReader

DR.Close()
Conn.Close()

Der beschriebene Fehler tritt in der Zeile:„DR = Com.ExecuteReader“ auf.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi,
dann fällt mir dazu nur noch ein, dass es die Tabelle Contact nicht geben könnte, ev. Contacts stattdessen?

lg
M.

Leider ist es nicht so einfach. Der Query ist Korrekt. Ich habe ihn an Access getestet.

Funktioniert den der Code-Schnipsel bei Dir?

Hy!
VB ist nicht meine spezialität, aber ich würde mal versuchen, DR nicht mit nothing (ich nehm mal an das is null,nil) zu initialisieren.
sondern mit „DR = new dataReader“ oda was auch immer…

wenn du DR = nothing machst, und danach eine methode von DR verwenden willst (DR.ExecuteReader()) dann versuchst du eine methode von einem NULL object zu verwenden.
Falls das nicht hilft, versuch das ganze mal in einen try catch block zu setzen zwecks information…

Greets Tom

Hy!
Hab dummerweise meine antwort auf den ursprungspost gepostet, also nachsehn :smile:
Ausserdem meinte ich natürlich DR = cmd.ExecuteReader() nicht DR.ExecuteReader(). Aber auch hier… an dieser stelle im code ist DR nothing… ich denke daran könnte es liegen

Greets Tom

Antwort gefunden! Der Code ist richtig. Er verlangt jedoch zwingend die MDAC 2.6. Mit der MDAC 2.8 funktioniert dies scheinbar nicht.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Antwort gefunden! Der Code ist richtig. Er verlangt jedoch
zwingend die MDAC 2.6. Mit der MDAC 2.8 funktioniert dies
scheinbar nicht.

Ach Du Schande! Wenn das so ist, dann hat sich M$ mal wieder einen ziemlichen Hammer geleistet. Code wie Deiner ist nun wirklich elementar und wird vermutlich haufenweise so verwendet. Und wenn das nicht klappt…

Danke für’s Rausfinden jedenfalls! *chen dafür. Dass die neuesten MDAC der Grund sind hätte ich echt nicht erwartet. Aber jetzt weiss man, woran’s noch liegen kann.

Wie sieht denn nun Dein Workaround aus? Immer MDAC 2.6 installieren oder nicht mit ExecuteReader arbeiten? Funktioniert denn ein Execute überhaupt oder kracht’s da auch?

Martin

Kann mir jemand sagen, wo im untenstehenden Code der Fehler
liegt?
Beim Aufruf von ExecuteReader erhalte ich die
Fehlermeldung:„An unhandled exception of type
‚System.NullReferenceException‘ occurred in system.data.dll
Additional information: Der Objektverweis wurde nicht auf eine
Objektinstanz festgelegt.“

Dim Conn As OleDbConnection = New OleDbConnection(CONNSTRING)
Dim Com As OleDbCommand = New OleDbCommand
Dim DR As OleDbDataReader = Nothing

Conn.Open()

Com.Connection = Conn
Com.CommandText = „SELECT * FROM Contact“
DR = Com.ExecuteReader

DR.Close()
Conn.Close()

Funktioniert den der Code-Schnipsel bei Dir?

Ja, gegebenenfalls die Tabelle existiert. Wenn die Tabelle nicht existiert tritt der beschriebene Fehler auf.

Antwort gefunden! Der Code ist richtig. Er verlangt jedoch
zwingend die MDAC 2.6. Mit der MDAC 2.8 funktioniert dies
scheinbar nicht.

Ach Du Schande! Wenn das so ist, dann hat sich M$ mal wieder
einen ziemlichen Hammer geleistet. Code wie Deiner ist nun
wirklich elementar und wird vermutlich haufenweise so
verwendet. Und wenn das nicht klappt…

Danke für’s Rausfinden jedenfalls! *chen dafür. Dass die
neuesten MDAC der Grund sind hätte ich echt nicht erwartet.
Aber jetzt weiss man, woran’s noch liegen kann.

Wie sieht denn nun Dein Workaround aus? Immer MDAC 2.6
installieren oder nicht mit ExecuteReader arbeiten?
Funktioniert denn ein Execute überhaupt oder kracht’s da auch?

Dann liegt es vermutlich am Connection String. Wie sieht der denn aus?