4

Ich möchte den richtigen Weg zu DataReader kennen lernen. (C# und Advantage Database)ASP.NET, Richtiger Weg zur Verwendung von DataReader

Angenommen, ich habe Bestell-, Artikel- und Kundentabellen in meiner Datenbank.

und ich muss die Daten aus jeder Tabelle in einer CS-Datei lesen.

Also habe ich die Datenbankverbindung geöffnet und Daten mit DataReader gelesen.

wie

AdsConnection conn = new AdsConnection("~~~~"); 
AdsCommand cmd; 
AdsDataReader reader; 

conn.open(); 
cmd = conn.CreateCommand(); 
cmd.CommandText = "Select * from order"; 
reader = cmd.ExecuteReader(); 

und Jetzt brauche ich die andere Tabelle zu lesen. aber ich denke, ich muss die Verbindung und den Leser schließen und sie neu verbinden und neu definieren.

Also definiere ich den anderen Leser.

conn.Close(); 
conn.Open(); 
AdsDataReader itemReader; 
cmd.CommandText = " Select * from item"; 
itemReader = cmd.ExecuteReader(); 

. 
. 
reader.close(); 
itemReader.close(); 
conn.Close(); 

Ist es in Ordnung? Verwenden Sie so? Jeder weiß besser Weg, bitte rät mich ~

Vielen Dank!

Antwort

4

ADO.NET 2.0 führte eine Funktion namens MARS - Multiple Active Result Sets ein. Auf diese Weise können Sie mehrere Abfragen an die Datenbank senden und sie mit einem einzigen Aufruf abrufen.

Hier ist der MSDN-Artikel mit einem Codebeispiel, das MARS verwendet:

http://msdn.microsoft.com/en-us/library/yf1a7f4f(v=vs.80).aspx

Beachten Sie, dass die Verbindungszeichenfolge der Multiple Eigenschaft auf True setzt.

+0

Nizza Antwort zu lernen oder zu verwenden. +1. – David

+0

Vielen Dank für Ihre Antwort, aber Advantage Database Connection unterstützt MultipleActiveResultSets nicht. :( –

2

(als die geeignetere Antwort gelöscht wurde)

Sie können die Verbindung offen halten, aber Sie sollten, als eine Frage der guten Praxis, schließen Sie den Befehl und den Reader so schnell wie möglich.

Der beste Weg ist, jedes dieser Ressourcen in eine using() { } Anweisung zu setzen.

Wenn es zum Beispiel möglich oder vorteilhaft ist, jede Abfrage in einer separaten Methode abzulegen, verwenden Sie für jede Verbindung eine separate Verbindung. Solange Ihre Datenbank das Verbindungspooling unterstützt, wird die Leistung nicht beeinträchtigt.

Eine weitere Punkte:

  • nicht SELECT * verwenden, buchstabieren die Spalten
+0

Aha! Also, wenn die Ressourcen in die Verwendung(), dann muss ich sie überhaupt nicht schließen? ^^ tyty! –

+0

Genau, und es ist ausnahmesicher und die Vars sind schön lokal auf den Block etc. –

+0

IC ! Vielen Dank! –

Verwandte Themen