Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#]Database connectie cachen in Class dll

Pagina: 1
Acties:

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 29-11 17:06
Hallo allemaal, ik heb een activex dll in vb6 die ik wil porten naar C#. In deze dll heb ik een connectie object waarmee ik een connectie opzet naar een database. Deze connectie wordt gecached in een globale variabele in een module. Verder heb ik in deze dll een aantal andere objecten die data ophalen uit de database. Deze andere objecten maken gebruik van de gecachete verbinding.
Deze constructie wil ik ook zo maken in C#. Hiervoor heb ik een Connectie klasse gemaakt in C#. Maar ik kan nu niet bij de gecachete connectie komen vanuit mijn andere klasses. Hoe kan ik dezelfde constructie maken als in vb6?

Hail to the king baby!


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 27-11 10:50

_Thanatos_

Ja, en kaal

Met ADO.NET hoef je je connection niet te cachen, dat gebeurt automagisch in een connection pool.

日本!🎌


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 16:23

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 gelooft dat een gecachede connectie juist kan zorgen voor stabiliteitsproblemen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verdiep je eens in Connection Pooling ;)

[ Voor 43% gewijzigd door RobIII op 08-11-2007 23:02 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 29-11 17:06
Ok, dus de connectie zelf cachen is niet zo'n goed idee. Maar hoe kan ik dan ervoor zorgen dat ik eenmalig een connectie klasse maak, en zolang die actief is dat ik dan ik de andere klasses de connectiestring kan gebruiken??

Hail to the king baby!


  • /\/\|)
  • Registratie: Juli 2000
  • Laatst online: 21-11 12:02
urk_forever schreef op vrijdag 09 november 2007 @ 22:41:
Ok, dus de connectie zelf cachen is niet zo'n goed idee. Maar hoe kan ik dan ervoor zorgen dat ik eenmalig een connectie klasse maak, en zolang die actief is dat ik dan ik de andere klasses de connectiestring kan gebruiken??
Gewoon niet doen dus. Iedere keer wanneer je een connectie nodig hebt, open je hem gewoon met de gewenste connectiestring.

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 29-11 17:06
Ja, dat wil ik ook, maar hoe krijg ik het voor elkaar dat die connectie string globaal beschikbaar is, dus net als een module in vb6.
Volgens mij als ik het in een klasse zet en ik maak steeds een nieuwe klasse aan met

MyConnection bla = new MyConnection();

Dan zal de string leeg zijn. En ik wil ook niet steeds die MyConnection mee moeten geven.

[ Voor 45% gewijzigd door urk_forever op 09-11-2007 23:34 ]

Hail to the king baby!


  • whoami
  • Registratie: December 2000
  • Laatst online: 29-11 22:54
Check eens een willekeurige tutorial over ADO.NET . Je zal zien dat de meeste mensen hun connectie-string opslaan in de app.config of de web.config.
En ik wil ook niet steeds die MyConnection mee moeten geven.
En dan ? Met wat hocus pocus weet je programma dan naar welke DB hij moet connecteren of wat ?
Of die connectie-string komt zomaar uit de lucht vallen ?

Je kan je conn. string opslaan in je config file, en dan mbhv de Configuration classes kan je 'm uitlezen.

https://fgheysels.github.io/


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 29-11 17:06
Zal even schematisch aangeven hoe het nu gebeurt.

* Het programma start, er wordt een nieuw MyConnection object aangemaakt, hier wordt de connectie string ingestopt en de verbinding wordt opgezet. Het MyConnection object is beschikbaar zolang het programma draait
* Als er data opgehaald moet worden uit de database wordt er een MyRecord object aangemaakt, waar een filter (SQL) ingestopt wordt en de records worden opgehaald.

Binnen de klasse dll waar MyConnection en MyRecord toe behoren wordt de connectie (niet zo'n goed idee dus, dus de connectie informatie) opgeslagen in een globale variabele die in een vb6 module zit.
Als je dus een MyRecord object aanmaakt hoef je niks meer te doen voor de connectie want die is al beschikbaar. Je zegt dus:

Visual Basic 6:
1
2
3
4
5
6
7
8
Dim cnObj as new MyConnection
Dim recObj as new MyRecord

  cnObj.ConnectionString = "BLA"
  cnObj.Connect

  recObj.Filter = "Select * from tabel"
  recObj.GetRecords


Wat ik dus eigenlijk wil is dat zolang het MyConnection object in gebruik is dat dan de connectie string beschikbaar is. Maar zo gauw dat object opgeruimd wordt dat dan ook de globale variabele opgeruimd wordt.

[ Voor 14% gewijzigd door urk_forever op 10-11-2007 11:36 ]

Hail to the king baby!


  • whoami
  • Registratie: December 2000
  • Laatst online: 29-11 22:54
Dus, je connectie blijft open staan vanaf het programma opstart, tot wanneer je het programma afsluit ?
Da's nu niet echt een goed idee, aangezien DB-connecties een gelimiteerde resource zijn. Van zodra je voor een onbepaalde tijd je connectie niet meer nodig hebt -> sluiten.

https://fgheysels.github.io/


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 31-10 11:58
Iets een duwtje in de goede richting:

ASP.NET C#:
1
2
3
4
5
6
7
<connectionStrings>
  <add 
    name="NorthwindConnectionString" 
    connectionString="Data Source=serverName;Initial Catalog=Northwind;Persist Security Info=True;User ID=userName;Password=password"
    providerName="System.Data.SqlClient"
  />
</connectionStrings>


Visual Basic .NET:
1
Dim connStr As String = ConfigurationManager.ConnectionStrings("NorthwindConnectionString").ConnectionString

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 29-11 17:06
@whoami: Nee niet de connectie blijft open staan, de connectiestring blijft tijdens de lifetime van het object in het geheugen. Zo gauw het object opgeruimd wordt moet de connectie string ook leeg zijn.

@riezebosch: Ik snap wel hoe die config settings werken, maar dan schrijf je de connectie string weg naar de schijf. Ik wil hem alleen in het geheugen hebben.

Hail to the king baby!


  • whoami
  • Registratie: December 2000
  • Laatst online: 29-11 22:54
En hoe wil je 'm in 't geheugen krijgen ?

Als jij persé je connectie de ganse lifetime open wil houden; jij je zin hoor ... .

https://fgheysels.github.io/


  • BCC
  • Registratie: Juli 2000
  • Laatst online: 13:52

BCC

whoami schreef op zaterdag 10 november 2007 @ 15:05:
En hoe wil je 'm in 't geheugen krijgen ?
De gebruiker moet hem intikken bij het inloggen :)?

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 31-10 11:58
Als het een security issue is kan je ook (delen van) je config encrypten.

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


  • Tepel
  • Registratie: Juni 2006
  • Laatst online: 17-08-2024
Ik denk dat deze jongen iets bedoelt met een factory

C#:
1
2
3
4
5
6
7
8
public class ConnectionFactory
{
    protected static string ConnString = "<connection string>";

    public static RandomConnection GetConnection () {
          return new RandomConnection(ConnectionFactory.ConnString);
    }
}


Zoiets dus. Je connection string staat op 1 plek. bla bla bla etc etc

0x7F


  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 29-11 17:06
Ok, ik ga de suggestie van Tepel eens proberen. Iedereen in ieder geval bedankt voor de opmerkingen. En natuurlijk iedereen bedankt voor hun geduld met deze vb6'er die ook C# probeert ;) :)

[ Voor 30% gewijzigd door urk_forever op 10-11-2007 21:38 ]

Hail to the king baby!

Pagina: 1