Feedback verzoek, kan dit niet makkelijker?

Status
Niet open voor verdere reacties.

jasperkennis

Gebruiker
Lid geworden
3 dec 2009
Berichten
6
Hallo,

Onderstaande code is in staat de resultaten van een query direct naar een template te parsen. De key-words in de template zijn hetzelfde als de namen van de tabellen in db. De code genereert een hashtable waarin de key gelijk is aan de keywords, en vervangt die met de values uit de resultaten van de query.

Maar het is niet echt mooie code geworden:p 3 DB calls voor een handeling is eigenlijk niet acceptabel. Ziet iemand ruimte voor optimalisatie of heeft iemand suggesties om dit beter te doen?

[CPP] // Eerst het aantal kolommen bepalen:
this.sql.SelectCommand = query;
IEnumerable resultaten = this.sql.Select ( DataSourceSelectArguments.Empty );
int teller = 1;
foreach ( DataRowView resultaat in resultaten )
{
teller++;
}

// Door de resultaten heen loopen:
SqlCommand cmd = new SqlCommand ( query , this.connectie );
this.connectie.Open ( );
SqlDataReader dr = cmd.ExecuteReader ( CommandBehavior.CloseConnection );
for ( int i = 0 ; i <= teller ; i++ )
{
string kolom_key = dr.GetName ( i ).ToString ( );
this.data_rij.Add ( kolom_key , "" );
}
this.connectie.Close ( );

ICollection data_rij_keys = this.data_rij.Keys;
foreach ( DataRowView resultaat in resultaten )
{
Hashtable definitieve_output_rij = new Hashtable ( );
// De values bij de keys zoeken in invoeren:
foreach ( string data_rij_key in data_rij_keys )
{
definitieve_output_rij[data_rij_key] = resultaat[data_rij_key];
}
this.data_set.Add ( definitieve_output_rij );
}[/CPP]

Alvast bedankt,

Jasper
 
lol ik wil je graag helpen maar alles wat met DataTables en DataRows te maken heeft is in mijn ogen een project van minstens 5 jaar oud :) Dat is wat de mensen doen die begonnen zijn met VS 2003 of vroeger.

als ik jou was zou ik eens overwegen om een Object Relational Mapping te gebruiken.

Is het een nieuw project? heb je al veel code geschreven?
Als je durft wat nieuwe dingen te overwegen, zeker eens kijken naar één van de volgende
- NHibernate (gebruik ik ook, gaat beestig goed om Classes onmiddellijk aan data te linken)
- Entity Framework: NHibernate lookalike maar dan van Microsoft.

Het voordeel van NHibernate is dat hij langer bestaat, het voordeel van Entity Framework is dat hij van Microsoft is (maar pas beschikbaar sinds Visual Studio 2008 SP1)

Ik weet dat dit jouw probleem niet oplost maar als je van plan bent om langer dan 1 maand te programmeren, dan is het al de moeite om er naar te kijken.
 
Perfect, ontzettend bedankt!

Zoals je waarschijnlijk aan de efficiëntie van deze code al kon zien heb ik weinig ervaring met .net en c#, maar het is een school project dus er is alle ruimte voor verbetering.

We draaien local met VS 2008 en sp1 (of hoger, up-to-date iig), en blijf liever zo dicht bij 't originele product dus t zal microsofts ding wel worden:)

Bedankt!

lol ik wil je graag helpen maar alles wat met DataTables en DataRows te maken heeft is in mijn ogen een project van minstens 5 jaar oud :) Dat is wat de mensen doen die begonnen zijn met VS 2003 of vroeger.

als ik jou was zou ik eens overwegen om een Object Relational Mapping te gebruiken.

Is het een nieuw project? heb je al veel code geschreven?
Als je durft wat nieuwe dingen te overwegen, zeker eens kijken naar één van de volgende
- NHibernate (gebruik ik ook, gaat beestig goed om Classes onmiddellijk aan data te linken)
- Entity Framework: NHibernate lookalike maar dan van Microsoft.

Het voordeel van NHibernate is dat hij langer bestaat, het voordeel van Entity Framework is dat hij van Microsoft is (maar pas beschikbaar sinds Visual Studio 2008 SP1)

Ik weet dat dit jouw probleem niet oplost maar als je van plan bent om langer dan 1 maand te programmeren, dan is het al de moeite om er naar te kijken.
 
Zeker een aanrader als beginner, als het mag van de leraar :) want dan ga je ADO omzeilen.

Een goeie tussenstap zou misschien nog de Data Access Application Block van Microsoft zijn.

je zal daar massa's voorbeelden van vinden.
 
Geweldig dit soort opmerkingen. Ik ben hard bezig me de C# taal eigen te maken i.c.m het plaatsen van de data in een SQL database. Ik heb hiervoor een Microsoft Press Book 70-561 "Microsoft .NET Framework 3.5 ADO.NET Application Development" aangeschaft. Willen jullie nu beweren dat ik op de verkeerde weg zit en dat alles inmiddels beter, sneller, efficienter en simpeler kan of is het toch verstandig dit complete boek door te werken en komen hier ook de Data Access Application Blocks en de Entity Framework aan bod? Verder hoor ik ook veel over LINQ is dit hetzelfde of is dit weer een andere afslag op mijn pad naar de ideale oplossing?

Kortom als beginner......Waar begin ik? Ik heb inmiddels een 7tal boeken staan (ADO.NET, WCF, ASP.NET, Application Development Foundation etc.) en vlieg van hoofstuk 1 in boek 1 naar hoofdstuk 13 in boek 5 niet wetende waar te beginnen. (al vind ik "C# 3.0 unleashed" een erg goed boek)

Zeker een aanrader als beginner, als het mag van de leraar :) want dan ga je ADO omzeilen.

Een goeie tussenstap zou misschien nog de Data Access Application Block van Microsoft zijn.

je zal daar massa's voorbeelden van vinden.
 
Laatst bewerkt:
Het is zeker heel goed om dat boek door te nemen om kennis op te doen van alles wat met ADO te maken heeft, ADO gaat tenslotte sneller dan NHibernate, Entity Framework (voortaan EF) en alle andere blocks (hoewel waarschijnlijk de Data Access Application Block goed in de buurt gaat komen.

Alle lagen wat boven op de basis gelegd worden nemen wat meer tijd in beslag, maar de keuze die je moet maken hangt af van
- voor wat gaat deze app dienen
- hoeveel mensen gaan deze ene app gebruiken
- hoeveel data moet ik verwerken

als het een simpele client app is, is NH of EF zeker en vast aan te raden omdat het gewoon een prachtig pakket is en simpel te gebruiken is.Met Entity Framework gaat het zelfs zo ver dat je de Database moet ontwerpen, en dan kan EF zelf jouw hele business objects in code maken. maw, zelf heeel wat werk uitgespaard.

Ik werk voor een bedrijf waar 50 editors bezig zijn op één terminal server met één dezelfde applicatie, en wij gebruiken NHibernate. geloof mij, niemand die er van klaagt dat dit traag gaat :) dus als je geen applicatie gaat maken wat op internet door 500 mensen tesamen gaat gebruikt worden, hoef je je geen zorgen te maken.

Uiteraard win je snelheid met de onderste laag (ADO) aan te roepen, alleen je verliest de helft van je tijd aan die ADO laag op te bouwen en het onderhoud is een hel.
Bij NH is het simpelweg aanpassing maken in database, aanpassing maken in uw object wat die tabel representeert in uw programma en dan de mapping tussen de 2 aanpassen.
(dus een kolom toevoegen is zo simpel als 2 regels code en klaar is je data layer)

in ADO maak je je queries zelf, in NH en EF worden de queries gegenereerd op basis van de mapping.

BTW: we hebben webservices naar de buitenwereld toe die behoorlijk wat DB calls moeten kunnen verwerken (enkele per seconde, tot in de toekomst misschien een tiental per seconde). Die maak je dus echt wel beter in ADO, of zelfs nog een laagje lager (ODBC), maar dat is voor High performance apps. voor een gewone editor moet dit echt niet.
 
Laatst bewerkt:
BTW: we hebben webservices naar de buitenwereld toe die behoorlijk wat DB calls moeten kunnen verwerken (enkele per seconde, tot in de toekomst misschien een tiental per seconde). Die maak je dus echt wel beter in ADO, of zelfs nog een laagje lager (ODBC), maar dat is voor High performance apps. voor een gewone editor moet dit echt niet.

Dat is allemaal erg interessant wat je hier in op 't laatst zegt! De applicatie die ik op school bouw is namelijk een student volgsysteem. Een aantal mogelijkheden:

docenten kunnen cijfers invoeren en studenten kunnen cijfers inzien
studenten kunnen werk inleveren en docenten kunnen kijken wie wat ingeleverd heeft
docenten kunnen opdrachten online zetten en studenten lezen die
studenten kunnen zich inschrijven voor keuzemodules (en deze telt voor mijn verhaal)

Onze school heeft 40,000 studenten, en af en toe zijn er piek momenten. Vooral als de inschrijvingen voor de keuzemodules open gaan, maar ook als cijfers bekend worden of opdrachten online verschijnen ontstaat een stroom bezoekers (en db calls) waar de huidige diensten regelmatig op hun **** van gaan.

Voor de onderdelen van de site die onder zulke zware belasting te leiden hebben is het dus verstandig om zo min mogelijk abstractie lagen te gebruiken. Is het dan slim om 't toch te doen zoals ik in m'n oorspronkelijke post aan gaf?



@Speedy7912 , Over leren uit boeken, iedereen leert anders en voor sommigen zijn boeken erg effectief, maar de meeste mensen met wie ik samen studeer hebben niet zo veel aan boeken en veel meer aan vallen en opstaan. Boeken zijn vrij duur (zeven boeken gekocht:eek:), en bovendien erg lastig op waarde te schatten als je nog geen verstand van zaken hebt. Mijn bescheiden advies aan jou: volg online tutorials en ga een paar x gigantisch op je plaat (zoals ik nu dus kennelijk met m'n middeleeuwse database technieken waar ik al 3 maanden mee werk:p), voor de meesten werkt dat beter.
 
Jasper,

boeken zijn duur maar gezien de ernst van de situatie (ja altijd weer die werkdruk) vond ik dit een juiste manier en met oog op de toekomst (ik wil hier ook examen in gaan doen) zijn boeken altijd welkom. (en prijs is geen probleem als de baas betaald). Het programma dat ik vooralsnog moet maken is redelijk eenvoudig. Het zou uren moeten registreren van medewerkers op projectnummers. Ik zit alleen veel verder te denken en wil er op den duur een complete projectadministratie van maken. Het komt er dus op neer dat iedere keuze die ik nu maak gevolgen heeft in de toekomst. Kortom ik wil iedere stap weloverwogen maken. Overigens is C# nieuw voor mij maar ik heb in het verleden Delphi en diverse C varianten geprogrammeerd. Echters is dit inmiddels minimaal 6 jaar geleden waardoor opfrissen geen kwaad kan. Echter databases zijn wel compleet nieuw voor me gezien ik meer op hardware aansturing programmeerde.

Kortom veel nieuwe stof en daarbij opfrissen wat veel tijd kost. Ik zal 1 januari dan ook niet redden de eerste opzet af te hebben vrees ik gezien het feit ik iedere keuze goed probeer af te wegen waardoor ik ongetwijfeld in tijdnood kom:(
 
ivm snelheid
NHibernate zou tot 7 % trager zijn dan een rechtstreekse call, aangezien hij nog eerst queries gaat op bouwen. Ik denk dat je met een school applicatie niet snel problemen kan hebben als de database de juiste indexen heeft.

Ik veronderstel dat je ook met services gaat moeten werken op zo een grootschalig project? De data zal in mijn ogen toch ook beschikbaar moeten worden in andere projecten? Dan maak je beter één service voor data.
(kijk dan eens naar ADO.Net Data Services, werkt samen met Entity Framework)

ga je echt de applicatie van de school herschrijven?
of is dit maar een projectje voor school?
 
Kortom veel nieuwe stof en daarbij opfrissen wat veel tijd kost. Ik zal 1 januari dan ook niet redden de eerste opzet af te hebben vrees ik gezien het feit ik iedere keuze goed probeer af te wegen waardoor ik ongetwijfeld in tijdnood kom:(

Ik vergat dat ik de luxe heb dat ik student ben en dus fouten word geacht te maken. Merk ook dat daar in de praktijk erg weinig ruimte voor is (doe front-end werk) en dat is in mijn ogen een probleem, volgens mij zou de baas er meer voor terug krijgen als je wat meer ruimte kreeg om te experimenteren dan wanneer hij geld in je boekenkast pompt (beide zou natuurlijk nog beter zijn;)).

Succes in ieder geval:p
 
ik weet het, beter goed gejat als slecht verzonnen. En ik ben hier dan ook echt voorstander van op het moment dat ik weet waar ik mee bezig ben. Tot die tijd is het zelf dingen uitzoeken alvorens dingen die je toch niet begrijpt te implementeren.
 
ivm snelheid
NHibernate zou tot 7 % trager zijn dan een rechtstreekse call, aangezien hij nog eerst queries gaat op bouwen. Ik denk dat je met een school applicatie niet snel problemen kan hebben als de database de juiste indexen heeft.

Ik veronderstel dat je ook met services gaat moeten werken op zo een grootschalig project? De data zal in mijn ogen toch ook beschikbaar moeten worden in andere projecten? Dan maak je beter één service voor data.
(kijk dan eens naar ADO.Net Data Services, werkt samen met Entity Framework)

Leuk, meer nieuwe jargon. Na wat onderzoek, ja, idealiter zou de data ook voor andere applicaties toegankelijk moeten zijn, dus die services methode lijkt me een mooie oplossing. Momenteel is het dat niet en daar is constant ruzie over (wij, de studenten, willen gewoon met onze eigen gegevens aan de slag kunnen, kan dus niet).

Indexen is weer een verhaal apart, stukje materie waar ik me ook doorheen probeer te worstelen momenteel. 7% verlies in snelheid is heel acceptabel, het gaat toch om een internet dienst en de flexibiliteit van het systeem is erg belangrijk omdat scholen steeds veranderen hoe ze met hun gegevens om gaan.

ga je echt de applicatie van de school herschrijven?
of is dit maar een projectje voor school?

Met m'n huidige kennis niveau durf ik echt geen systemen aan scholen te verkopen:p Zou waarschijnlijk bagger zijn (al zijn de bestaande systemen dat net zo goed...). Maar we doen natuurlijk altijd alsof het wel om een echte opdracht gaat, daar zit 'm juist de kans iets te leren:)
 
als je de vrijheid hebt om te kiezen en je wilt echt indruk make, dan moet je ADO.Net Data Services gebruiken :) daar gaan ze volgens mij van achterover vallen. ik denk niet dat alle leerkrachten dit al kennen. het is behoorlijk nieuw
 
als je de vrijheid hebt om te kiezen en je wilt echt indruk make, dan moet je ADO.Net Data Services gebruiken :) daar gaan ze volgens mij van achterover vallen. ik denk niet dat alle leerkrachten dit al kennen. het is behoorlijk nieuw

De docenten kennen uberhaubt amper c#, ik studeer MT (media technology), techniek keuze is vrij, en de docenten hebben vooral een proces begeleidende rol, niet zozeer vak inhoudelijk. Helaas zal er niemand achterover slaan:p 4 paar glazige ogen zal code bekijken die ze niet echt begrijpen. Als 't er in hangt kom ik hier wel voor een klopje op m'n schouder ofzo:p
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan