[C#] DB Klasse schreiben mit Reader rückgabe

OliverD

Grünschnabel
Hallo,

ich habe mir eine DB Connect Klasse geschrieben, in der ich alle DB Operationen(wie. insert, löschen, etc.) anhandeln will.

Eine Methode macht mir aber Probleme. Die Methode soll aufgrund eines SQL Strings einen gefüllten OleDbReader zurückgeben.

Wenn ich ihn aber auslese, kommt eine Meldung, daß der Reader schon geschlossen sei.

Code:
public OleDbDataReader GetData(string ssql)
{
	OleDbDataReader reader;
	
        OleDbCommand com = new OleDbCommand(ssql, con);

        com.Connection.Open();

			
	reader = com.ExecuteReader();

	com.Connection.Close();

	return reader;

}

Die Methode rufe ich dann so auf:

Code:
DbConnect dbs =new DbConnect();
OleDbDataReader read;

read = dbs.GetData("SELECT * FROM tblPersonen");

Wenn ich dann mit

while(read.Read()){}

die Daten auswerten will, kommt immer die oben gennante Fehlermeldung.

Weiß da einer weiter?

Gruß,
Oliver
 

Norbert Eder

Erfahrenes Mitglied
Du hast in der Zeile
Code:
OleDbCommand com = new OleDbCommand(ssql, con);
einen vertippsler drinnen, du willst
Code:
OleDbCommand com = new OleDbCommand(ssql, com);
 

OliverD

Grünschnabel
Hallo,

ja doof von mir, hab den Rest der Klasse nicht gepostet! :(

Also "con" ist die OleDbConnection, die ich beim Klasseninit setze...

Alles funktioniert auchin der Klasse, nur wenn der Reader zurückgeben wird nicht.

Gruß,
Oliver
 

Norbert Eder

Erfahrenes Mitglied
Zu blöd von mir .. hab mir deinen Code nicht GENAU angesehen .. du gibst ja einen Reader zurück.

Nun das is ihmo ein wenig blöd, wenn du da ein com.Connection.Close(); machst. Der Reader braucht eine offene Connection.
 

OliverD

Grünschnabel
Hallo,

danke für den Tipp, ich habe com.Connection.Close(); mal rausgenommen und dann klappt es.

Wenn ich die Verbindung nicht selber schließe, macht die das automatisch? Ansonsten mülle ich doch alles mit offenen Connections zu, oder? :confused:

Danke & Gruß,
Oliver
 

zioProduct

Erfahrenes Mitglied
Führe den Close Befehl einfach nach dem Aufrufen deiner Methode auf, sobald du deinen Reader halt nimmer benötigst. Dann ist er offen wenn du ihn brauchst, und sobald er seinen Dienst getan hat, verdrückt er sich, und öffnet sich erst wieder wenn du ihn brauchst :)

mfg
ziop :suspekt: