Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[C#]Dynamisch opzetten db-verbinding

Pagina: 1
Acties:

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10 13:23
Al geruime tijd schrijf ik applicaties in VB6. Waarom? Dit is voor mij vertrouwde kost en datgene wat de applicatie moet kunnen, kan ik hiermee realiseren en de klanten zijn tevreden. Echter wordt het eens een keertje tijd om over te stappen naar .Net, dus is ga gelijk voor C#.Net. Nu wil ik gaan beginnen met mijn "oude"applicaties te herschrijven in C#. In mijn oude applicaties zijn er twee functies die regelmatig terugkomen.

1) ReadIni() een functie die programmainstellingen uit een ini-file haalt en ze in een variabele stopt (aldanniet in een class), met bijbehorende writeini();

2) dynamisch opbouwen van een databaseverbinding. Dit is een functie die de gebruiker de mogelijkheid geeft een verbinding te maken met een database. Dit is vergelijkbaar met het starten van een .udl bestand.

Het eerste kan ik volgens mij wel oplossen door even verder te zoeken op het Net, maar het tweede kan ik niet vinden. Ik wil nl. de databaseverbinding niet hard-coded maken, en de gebruiker of installer zelf de verbinding laten opbouwen.

Heeft iemand suggesties omtrent het tweede punt ??

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 15:20

Sebazzz

3dp

Het eerste kan ik volgens mij wel oplossen door even verder te zoeken op het Net
Ja, maar niet in .Net ;) Vreemd genoeg heeft .NET nog steeds geen mogelijkheid om ini files uit te lezen dus je moet het nog steeds met user32.dll of iets van codeproject maar dat is een ander verhaal ;)

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • Invisible_man
  • Registratie: Juni 2006
  • Laatst online: 11:47
Ini-bestanden is iets wat deprecated is (oftewel, niet meer ondersteund). De .net manier om instellingen op te slaan is via settings. Hiermee worden je instellingen door het systeem in een XML-bestand opgeslagen.

[ Voor 38% gewijzigd door Invisible_man op 15-08-2008 21:53 ]


  • cowgirl
  • Registratie: November 2000
  • Laatst online: 17-12-2020
Met een app.config/web.config heb je m.i. dezelfde functionaliteit als met een .ini. Vanaf 2.0 met de configurationmanager kan je de configfile ook schrijven.
@TS kan de connectiestring niet gewoon op dezelfde wijze in de .config?

edit:
@invisible_man: settings is in deze situatie waarschijnlijk inderdaad mooier. TS heeft in elk geval nu genoeg om zijn zoektocht voort te zetten :)

[ Voor 25% gewijzigd door cowgirl op 15-08-2008 21:54 ]


  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 15:20

Sebazzz

3dp

Invisible_man schreef op vrijdag 15 augustus 2008 @ 21:52:
Ini-bestanden is iets wat deprecated is (oftewel, niet meer ondersteund). De .net manier om instellingen op te slaan is via settings. Hiermee worden je instellingen door het systeem in een XML-bestand opgeslagen.
Als ik eerlijk moet zijn vind ik dat maar niets. Geen onderbouwing heb ik ervoor, maar ik houd het kindje liever in mijn eigen hand :) Of via .ini bestand of via het zelf hebben van een XML bestand. Ja niet logisch, maar ik vind het fijner zo.

[ Voor 9% gewijzigd door Sebazzz op 15-08-2008 21:57 ]

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10 13:23
v.w.b. via setting had ik dit idd gevonden, maar om de connectionstring in de app.config te stoppern zoek ik dus iets: voorheen via een udl-workaround (tja, zo zal ik het maar noemen).

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je hebt in de settingsfile ook een connectionStrings section en die kan je uitlezen met de ConfigurationManager.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
pkouwer schreef op vrijdag 15 augustus 2008 @ 21:46:
1) ReadIni() een functie die programmainstellingen uit een ini-file haalt en ze in een variabele stopt (aldanniet in een class), met bijbehorende writeini();
In .Net gebruik je geen .ini-bestanden, maar een app.config (of web.config) bestand om je configuratieinstellingen in op te slaan. De meest eenvoudige manier is je waarden toevoegen aan het <appSettings> element, deze kun je met ConfigurationManager uitlezen.
2) dynamisch opbouwen van een databaseverbinding. Dit is een functie die de gebruiker de mogelijkheid geeft een verbinding te maken met een database. Dit is vergelijkbaar met het starten van een .udl bestand.

Het eerste kan ik volgens mij wel oplossen door even verder te zoeken op het Net, maar het tweede kan ik niet vinden. Ik wil nl. de databaseverbinding niet hard-coded maken, en de gebruiker of installer zelf de verbinding laten opbouwen.
Je kunt de SqlConnectionStringBuilder een connection string samen laten stellen aan de hand van user input. Deze kun je vervolgens gebruiken in je SqlConnection.

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10 13:23
wat ik eigenlijk bedoel te zeggen is het volgende:

Om in VB6 de gebruiker een connectie naar een database te laten maken, roep ik de datalink-wizard op. De uitkomst hiervan (de gehele connectionstring), gebruik ik voor het opbouwen van de database verbinding. Geen probleem, werkt naar behoren.

Ik zoek eigenlijk iets gelijkswaardigs, of een betere manier om de eindgebruiker in C# een db-verbinding te laten maken.

Dit heeft dus niets meer te maken met de opslag van de connectionstring !!

  • whoami
  • Registratie: December 2000
  • Laatst online: 12:59
Zoals reeds eerder gezegd: met de ConnectionStringBuilder class ....
Als je daar een wizardje omheen wil, zal je die vziw zelf moeten programmeren. Of anders gebruik maken van het werk dat iemand reeds gedaan heeft : klik

https://fgheysels.github.io/


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10 13:23
whoami schreef op woensdag 24 september 2008 @ 22:15:
Zoals reeds eerder gezegd: met de ConnectionStringBuilder class ....
Als je daar een wizardje omheen wil, zal je die vziw zelf moeten programmeren. Of anders gebruik maken van het werk dat iemand reeds gedaan heeft : klik
Super !!!

Hoe doen jullie dit trouwens ? De eindgebruiker een DB-connectie laten opzetten ?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
pkouwer schreef op woensdag 24 september 2008 @ 22:20:
[...]

Super !!!

Hoe doen jullie dit trouwens ? De eindgebruiker een DB-connectie laten opzetten ?
In de meeste applicaties (die ik maak ieder geval) hoeft de eindgebruiker geen database te selecteren, maar is het gewoon een configuratie setting die gewoon in de web-config gedaan word.

Maar als ik een applicatie zou hebben zou ik gewoon een settings scherm maken waar de gebruiker de juiste gegevens in kan typen en de ConnectionStringBuilder gebruiken

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • HawVer
  • Registratie: Februari 2002
  • Laatst online: 15-11 12:06
pkouwer schreef op woensdag 24 september 2008 @ 22:20:
[...]

Super !!!

Hoe doen jullie dit trouwens ? De eindgebruiker een DB-connectie laten opzetten ?
Vergelijkbaar met Sql Server management studio.. Invoer velden voor Servername -> Authentication -> Username -> Password -> Database name. Deze configuratie slaan we hier op dmv Xml Serializing. Vanuit die configuratie genereer ik zelf een connection string.

http://hawvie.deviantart.com/


  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

Sebazzz schreef op vrijdag 15 augustus 2008 @ 21:54:
[...]

Als ik eerlijk moet zijn vind ik dat maar niets. Geen onderbouwing heb ik ervoor, maar ik houd het kindje liever in mijn eigen hand :) Of via .ini bestand of via het zelf hebben van een XML bestand. Ja niet logisch, maar ik vind het fijner zo.
Wat heb je dan niet in handen met Settings? Je haalt een waarde op en je slaat ze achteraf op. Bij fout/leeg/klik laat je gebruiker een andere connectionstring of plaats of server invullen. Jij gebruikt ook geen strings omdat je het fijner vind de afzonderlijke letters zelf in een char/byte array bij te houden ofzo? :P

3 labels en 3 textboxes in een window voor je 'wizard'

[ Voor 4% gewijzigd door ? ? op 25-09-2008 14:29 ]


  • Laurens-R
  • Registratie: December 2002
  • Laatst online: 29-12-2024
En als je dan in het allerergste geval alsnog een INI bestand wil hebben, dan is een klasse hiervoor ook echt niet moeilijk te schrijven hoor ;)

Zodra je een naam tussen brackets tegenkomt weet je dat er een nieuwe sectie begint. Als een regel begint met een ; weet je dat je deze kan negeren. De rest kan je gewoon parsen er van uitgaande dat de naam voor het = teken de variabele is en dat het stuk achter het = teken de waarde is.

+ wat checks om te controleren of een variabele en waarde aan een x aantal eisen voldoen.

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 15:20

Sebazzz

3dp

@hierboven: Niet zo handig. Dit is heel erg langzaam. Beter is om enkele functies uit user32.dll te importeren. Daar kan je functies vinden om INI bestanden te lezen. Op Codeproject staat ook zo'n klasse.
era.zer schreef op donderdag 25 september 2008 @ 14:26:
[...]
Wat heb je dan niet in handen met Settings? Je haalt een waarde op en je slaat ze achteraf op. Bij fout/leeg/klik laat je gebruiker een andere connectionstring of plaats of server invullen.
Nee, maar bepaalde dingen kan je gewoon niet in een settings bestand kwijt. En ik heb liever een klasse die de settings beheert, en die serialize ik dan.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Sebazzz schreef op vrijdag 26 september 2008 @ 16:00:
@hierboven: Niet zo handig. Dit is heel erg langzaam. Beter is om enkele functies uit user32.dll te importeren. Daar kan je functies vinden om INI bestanden te lezen. Op Codeproject staat ook zo'n klasse.
Heel erg langzaam lijkt me toch nogal onzin. Het lijkt me juist aan te raden om dat soort unmanaged code zoveel mogelijk te vermijden. De tijd is denk ik niet echt relevant, zelfs niet als het ini-bestand vele mb's groot wordt (zolang je niet steeds opnieuw gaat inlezen). Als je het niet gelooft, test het dan met de 12 regels leescode op pedorus in "\[C#] waardes in een hashtable veranderen".

Maar goed, meestal kun je beter gewoon dingen van System.Configuration gebruiken, als je niet al gebonden bent aan ini-bestanden. Dat schijnt ervoor gemaakt te zijn ;)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1