Laden...

Datenbankverbindung nicht bei jeder Abfrage neu herstellen

Erstellt von PeterRRR vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.616 Views
P
PeterRRR Themenstarter:in
50 Beiträge seit 2009
vor 13 Jahren
Datenbankverbindung nicht bei jeder Abfrage neu herstellen

Hallo!
Wahrscheinlich ist meine Frage eine totale Anfängerfrage aber ich bin ja auch noch ganz neu bei ASP.NET.
Ich habe eine Seite mit einem Eingabefeld, darin kann eine Nummer eingegeben werden, wonach dann eine Datenbank durchsucht wird und - falls die Nummer gefunden wurde ein zugehöriger Zeitstempel dem Benutzer angezeigt wird.
Grundsätzlich funktioniert auch alles einwandfrei, Datenbankverbindung, Abfrage, Ergebnis anzeigen - alles kein Problem. Was ich aber unsauber finde ist, dass bei jeder einzelnen Abfrage eines Benutzer, also jedes mal wenn eine neue Nummer eingegeben wird eine neue Datenbankverbindung erstellt wird. Daher meine Frage jetzt: Wie stellt man es an, dass nur eine einzige Datenbankverbindung geöffnet ist, die dann für jede Abfrage von jedem Benutzer verwendet werden kann, ohne jedesmal neu zur Datenbank zu verbinden?

Danke schonmal für eure Hilfe!

LG
Peter

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

wenn mit ADO.net auf die DB zugegriffen wird (gilt auf für Linq2Sql und das ADO.net EF) dann werden die Verbnindungen in einem Pool gehalten -> ConnectionnPooling. D.h. es werden zu Beginn ein paar Connections geöffent und wenn eine benötigt wird so wird eine aus dem Pool genommen und nach der Arbeit wieder in den Pool zurückgelegt.

Kurz gesagt: ADO.net erledigt das für dich.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

S
902 Beiträge seit 2007
vor 13 Jahren

Hallo,

wie greifst du auf die Datenbank zu?
Auf welche?

Im Prinzip ist es so, dass .net (Ado.net SqlConnection zB) einen ConnectionPool besitzt, und diesen verwaltet.
Wenn du eine Verbindung brauchst, bekommst du eine aus diesem Pool, es wird also nicht jedes mal eine komplett Neue erzeugt.

Es wäre aber so und so nicht unbedingt clever, eine einzige Verbindung für mehrere Benutzer über einen langen Zeitraum offen zu halten. Die Connections sollten relativ schnell wieder in den Pool zurückfließen.

mfg
serial

[Edit] too late =)

1.552 Beiträge seit 2010
vor 13 Jahren

Hallo PeteRRR,

eine neue Datenbankverbindung erstellt wird

So soll es auch sein.
Normalerweise, so wie es beim MSSQL ist, wird ein ConnectionPool erstellt, d.h. es wird (solange der ConnectionString der selbe bleibt) keine komplett neue Verbindung zum Server aufgebaut.
Siehe dazu: SQL Server Connection Pooling

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

P
PeterRRR Themenstarter:in
50 Beiträge seit 2009
vor 13 Jahren

Danke euch allen für die Antworten. Ich weiß jetzt allerdings nicht ob das mit dem Pool auch funktioniert, so wie ich die Datenbankverbindung herstelle. Siehe dazu nachfolgendes Codebeispiel (nur das nötigste, ohne ExceptionHandling und dergleichen):


if (Page.IsPostBack)
            {
                OracleConnection conn = new OracleConnection("<conn string>");

                string timestmp = "";

                OracleCommand cmd = new OracleCommand("select timestmp from auftraege where nr = :id", conn);
                cmd.Parameters.Add("id", orderNr.Value);
                cmd.Prepare();
                timestmp = (string)cmd.ExecuteScalar();

                conn.Close();

                auftrTimestmp.Text = timestmp;
            }

LG
Peter

1.552 Beiträge seit 2010
vor 13 Jahren

So lange der Wert von <conn string> sich nicht ändert funktioniert der Pool und es wird immer die selbe Connection vom Pool herausgenommen, sonst nicht.

edit: evtl kannst du einen using block um die Connection machen, so wie in dem Beispielslink von mir gepostet wurde, denn du rufst .Dispose() der Connection nicht auf.

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp