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

[c#/access] Hoe ga je efficient met een database om

Pagina: 1
Acties:
  • 855 views sinds 30-01-2008
  • Reageer

  • DJohn001
  • Registratie: December 2005
  • Laatst online: 02-01 19:33
hallo,

Ik ben sinds kort bezig met C# en ben nu bezig meer een soort agenda. Voor heb opslaan van de gebruikers en agenda punten heb ik een kleine Access database gemaakt. Ik kan er als data uithalen en in opslaan maar maak dan steeds opnieuw verbinding met de database op de manier zoals op deze website word aangegeven http://www.csharphelp.com/archives/archive70.html

Ik kan ook een kleine class maken

C#: cls_Database.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
     
namespace DB_class
{
    public class DBDtaRdr
    {
        public OleDbDataReader Rdr;


        public DBDtaRdr(string Slct)
        {
            OleDbCommand cmmnd = new OleDbCommand();
            OleDbConnection cnnctn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\\..\\..\\data\\agenda.mdb");

            cmmnd.CommandText = Slct;
            cmmnd.Connection = cnnctn;

            cmmnd.Connection.Open();
            Rdr = cmmnd.ExecuteReader();
        }
    }
}


nu kan ik op de volgende manier dat uit de database ophalen:

C#:
1
2
3
4
5
DBDtaRdr OPRdr = new DBDtaRdr ("SELECT naam, functie FROM users WHERE id=1");

if(OPRdr.Rdr.Read()){
  label1.Text = OPRdr.Rdr[0].ToString();
}


Ik heb het idee dat dit beter kan ik weet alleen niet hoe, Ik kan wel alles via de klik, drag en drop methode doen in VS dit is snel gedaan en makkelijk maar daar leer ik ook niet echt veel van. Nu is mijn vraag kunnen jullie mij helpen met een betere opstap? Zodat het makkelijker word query's uit te voeren en te verwerken?

Alvast bedankt.

  • Vedett.
  • Registratie: November 2005
  • Laatst online: 14:12
Om te beginnen moet je de connectie nog terug sluiten en parameters gebruiken. Kijk eens naar de OleDbCommand.Parameters collection. Maar hier is voor de rest genoeg over te vinden op het internet.

Wat je volgens mij ook wilt bereiken is om niet telkens een OleDbCommand te maken, vervolgens een OleDbConnection te instantieren,..... dus veel generieker werken. Dat is inderdaad iets lastiger als je huidige opzet. Zeker als je wilt afdwingen dat de connectie gesloten word als je de Reader heb uitgelezen.

Volgens mij gaat je dit niet direct lukken. Probeel niet te lopen voor je kan gaan. Je zult eerst moeten leren om geen data acces code te implementeren in je Form (label1.Text = Reader.GetString() :X ) Dus een fatsoenlijke data acces layer opzetten. Daar vind je op google ook wel genoeg over.

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Heeft de OleDbCommand niet als SqlCommand de behaviour CommandBehaviour.CloseConnection? Hij zou dan eventueel deze behaviour kunnen meegeven aan ExecuteReader(). Zodra hij dan de reader closed (wat ik in het voorbeeld ook niet ziet gebeuren), wordt dan automatisch de connectie ook gesloten.
Wat betreft het gebruik van data functies in c#. Ik dacht dat ik vorige week in de boekwinkel Donner C# in 24 uur voor enkele euro's liggen. Koop eens zo'n boek (Er zal ook wel een C# voor dummies zijn) en neem dat eens door. Via zo'n boek leer je ten minste de basis van het programmeren (meestal) correct aan zodat je daarna via tutorials, examples of artikelen van internet die kennis kunt uitbereiden, zonder dat je eventuele slechts programmeer eigenschappen van de auteur overneemt..

Ik elk geval veel succes.

If it isn't broken, fix it until it is..


  • DJohn001
  • Registratie: December 2005
  • Laatst online: 02-01 19:33
Sorry voor de late reactie maar ik had het gister en vandaag erg druk.

Ik heb al een boek gekocht namelijk visual C# 2005 de basis opzich vind ik het wel een interessant boek alleen word er voor de database interactie gebruik gemaakt van Visual studio tools die alleen mssql en MS Access bovendien leer je er niet echt veel van. Daarom vroeg ik mij hoe je dit zelf makkelijk en handig kunt afhandelen. Ik heb wel aardig ervaring met PHP en daar vind ik het veel makkelijker om data uit een database te halen vind ik.

PHP:
1
2
3
4
5
6
7
8
$result = mysql_query("SELECT id, name FROM tabel");

while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    printf("ID: %s  Name: %s", $row[0], $row[1]);  
}

mysql_free_result($result);
mysql_close();


nu vraag ik mij dus af hoe dit voor elkaar krijg ik heb heel wat af gezocht maar de meest groot en onoverzichtelijk om door te kijken vooral als je pas een paar weken met datareader, dataadapters enz. in aanraking bent gekomen. Vooral het gebruik van datasets, datacollecties en datatebels is mij nog niet helemaal duidelijk ik heb hiervoor wel een paar keer de msdn pagina's bekeken maar weet nog niet precies hoe ze te gebruiken en wat het voordeel is.

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
DJohn001 schreef op zaterdag 12 januari 2008 @ 17:14:
Ik heb wel aardig ervaring met PHP en daar vind ik het veel makkelijker om data uit een database te halen vind ik.

PHP:
1
2
3
4
5
6
7
8
$result = mysql_query("SELECT id, name FROM tabel");

while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    printf("ID: %s  Name: %s", $row[0], $row[1]);  
}

mysql_free_result($result);
mysql_close();


nu vraag ik mij dus af hoe dit voor elkaar krijg ik heb heel wat af gezocht maar de meest groot en onoverzichtelijk om door te kijken vooral als je pas een paar weken met datareader, dataadapters enz. in aanraking bent gekomen. Vooral het gebruik van datasets, datacollecties en datatebels is mij nog niet helemaal duidelijk ik heb hiervoor wel een paar keer de msdn pagina's bekeken maar weet nog niet precies hoe ze te gebruiken en wat het voordeel is.
Ehm, eigenlijk kan het werken volgens hetzelfde principe als jouw php. Eerst maak je een verbinding met access ( net zoals je met php moet doen, alleen toon je dit nu hier niet ).
Dan voer je een query uit.
En dan doe je iets met die resultaten.
En je sluit de verbinding weer.

Btw ik zou je aanraden om het dbase gedeelte en je output gescheiden te houden ( ook in php ).
Puur vanwege het feit dat je nu door het mengen bij een grotere pagina / groter project echt een gigantische warboel krijgt.

Dus eerst alle data ophalen uit de database, en daarna alle data outputten

Verwijderd

Kijk eens naar een 3-tier model (3 lagen: Form laag <-> data laag <-> database laag).

Dit soort opdrachten krijgen wij op school (Fontys ICT 1e jaars) om een C# <> Access connectie te maken:
http://fhict.fontys.nl/St...%2dA251%2d856E2ED19BC5%7d

Nu maken ze hier gebruik van een set bekende queries, maar je zou eventueel ook een eigen methode kunnen schrijven die met een bepaalde dataset/database een query uitvoert.

[ Voor 26% gewijzigd door Verwijderd op 12-01-2008 17:52 ]

Pagina: 1