Laden...

Bereits geöffnete Datenbankverbindung Programmübergreifend nutzen

Erstellt von Thomas-B vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.156 Views
T
Thomas-B Themenstarter:in
6 Beiträge seit 2015
vor 8 Jahren
Bereits geöffnete Datenbankverbindung Programmübergreifend nutzen

verwendetes Datenbanksystem: Oracle 11g

Hallo und guten Abend in die Runde,

ich hab mal ine besondere Frage:
kann und wenn ja, wie kann ich eine mittels C# Programm bereits geöffnete Datenbankverbindung, von einem anderen C# Programm nutzen?

Der Hintegrund ist folgender:
Ich erstelle ein Hauptprogramm das die Verbindung und allgemeine Verwlatungen übernimmt.
Da ich aber noch nicht weiß welche DB Abfragen und Anforderungen notwenidg sind, möchte ich die Abfrageprogramme in DLL's packen.
Ich möchte damit eine "Modulare" Struktur bewahren und kann so entwoder neue Module anbieten, oder einfach Module austauchen bzw. Updaten, falls sich was ändert.
Der Aufruf eines DLL "Unterprogramm" funktioniert schon mal ganz gut. Nur wie kann ich dem Modul mitteilen, dass ich schon eine Datenbankverbindung hergestellt habe und diese dann nutzen?
Derzeit kann ich nur vom Modul aus nochmal eine neue Verbindung aufbauen.

Vielen Dank schon mal im voraus!
Thomas

2.078 Beiträge seit 2012
vor 8 Jahren

Wenn Du eine Verbindung öffnest, bekommst Du doch in der Regel ein Objekt, das die Verbindung repräsentiert?
Beim EntityFramework ist es der DataContext, bzw. DbContext im CodeFirst-Ansatz.

Das Objekt musst Du dann nur noch an die andere DLL übergeben und entsprechend nutzen.
Methoden-Aufruf, Property-Zuweisung, was auch immer.
Solange es in der selben AppDomain statt findet, solltest Du da keine Probleme haben.

Der Weitergabe an ein anderes Programm, bzw. ein anderen Prozess - das, was Du im Titel schreibst - dürfte allerdings etwas schwieriger werden und es ist definitiv nicht sinnvoll 😄

T
2.219 Beiträge seit 2008
vor 8 Jahren

Je nachdem wie du mit der DB kommunizierst, kannst du dies auch über den ConnectionString einstellen.
Z.B. kann man beim MS SQL Connection String Connection Pooling verwenden und auch einstellen wieviele Verbindungen im Pool vorgehalten werden sollen.
Müsste auch in ähnlicher Form bei Oracle klappen 😃

Info:
http://docs.oracle.com/cd/B28359_01/server.111/b28310/manproc004.htm
http://www.connectionstrings.com/oracle/

Da müsstest du mal schauen.
Da ich mich mit Oracle DBs nicht auskenne, kann ich nicht sagen was du einstellen musst.
Müsstest du mal bei Google nachlesen.
Aber mit Oracle ConnectionString und Pooling müsste sich was finden lassen 😃

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

6.911 Beiträge seit 2009
vor 8 Jahren

Hallo Thomas-B,

dein Vorhaben solltest du noch einmal überdenken bzw. in die richtige Richtung tunen. Dazu ist es aber notwendig dass du dich in ein paar etablierte Vorgehensweisen einliest. Die Stichworte dazu sind "Data Access Layer", "Schichtentrennung", "Repository Pattern", "Unit of Work".

Lies dich in diese Themen ein, dann wirst du sehen dass sich so ein modularer Ansatz ganz gut umsetzen lässt.

(Leider) ist das Thema schon ein wenig umfangreich und v.a. zu Beginn ein Hürde, aber sobald es gedanklich "Klick" gemacht hat, wird dir das sehr logisch erscheinen.

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!"

T
Thomas-B Themenstarter:in
6 Beiträge seit 2015
vor 8 Jahren

Vielen Dank erst mal in die Runde für die schnellen Antworten.
Es scheint tatsächlich ein recht komplexes Thema zu sein, bei dem ich mich tiefer einlesen muss.

@Palladin007
Könntest Du mir einen Denkanstoß mittels CodeSnippet geben wie das Objekt aussehen könnte und wie ich es in der DLL "abfange" um zu nutzen?
Einfache Strings hab ich schon mittels Methodenaufruf realisieren können, aber noch nicht Objekte.

3.825 Beiträge seit 2006
vor 8 Jahren

Hallo Thomas,

eine Datenbank Connection immer nur so lange wie nötig und so kurz wie möglich öffnen. Also nie längere Zeit geöffnet halten.

Siehe [Artikel] Ressourcen schonen - Datenbanken richtig öffnen und schließen

Dein Hauptprogramm sollte die Eigenschaften der Datenbank und den genauen Connectionstring nicht kennen.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3