2009-06-16 3 views
0

Ich habe eine Klasse mit einer Methode, die Daten aus einer Datenbank durch eine SELECT-gespeicherte proc erhält. Diese Methode verwendet SqlDbReader, indem ExecuteReader() auf SqlCommand zurückgegeben wird.Mit einem sqlconnection/sqlcommand über 2 DB-gebundene Methoden

Die Verbindung und alles wird in dieser Methode gemacht, mit Feldern (wie Verbindungszeichenfolge) als Felder auf Klassenebene festgelegt.

Ich muss jetzt ein Array basierend auf den Ergebnissen dieser Abfrage auffüllen (so dass die Spalten jeder Zeile in das Array mit einem eigenen Index gehen).

Diese Abfrage wird jedoch nicht alle Daten aus einer Tabelle auswählen, die beteiligt ist. Ich kann die Abfragen schreiben, um zu bekommen, was ich brauche, aber wie kann ich eine Verbindung in der Klasse verwenden? Wenn ich das Verbindungsobjekt instanziiere und im Konstruktor Open() aufruft, erhalte ich zur Laufzeit eine Ausnahme.

Ich hoffe auf das so etwas wie:

// At class level: 
sqlconn.Open(); 
// sqlcommand set up 


Method() 
{ 
// Fire stored proc 
// Insert results in a collection 
} 

Method2() 
{ 
// Pass same collection in (use same one), 
// Add new row columns into same collection 
} 

Wie kann ich dies tun, mit strengen Leistung im Sinne?

Antwort

0

Eine Möglichkeit wäre, die Verbindung Objekt zu übergeben um:

// At class level: sqlConn.Open(); // sqlcommand set up 

Method(sqlConn) { // Fire stored proc // Insert results in a collection } 

Method2(sqlConn); 
sqlConn.Close(); 

Die Grundvoraussetzung ist, so spät zu öffnen, wie Sie können, und so früh wie möglich zu schließen. Sie können sogar eine andere Methode schreiben, die die Verbindung öffnet, alle Methoden aufruft, die sie verwenden, und sie dann schließen.

+0

Kühl. Ich werde es versuchen. Die Methode, die du beschreibst, macht grundsätzlich alles andere als Methoden, die gespeicherte Procs auslösen, habe ich recht? Aus technischen Gründen kann ich mit einer API keine Parameter verwenden, daher kann ich nicht angeben, welche Methode ausgelöst wird oder nicht. – dotnetdev

Verwandte Themen