Toon posts:

[ADO.NET] Insert, Update in database

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ben op dit moment Ado.net aan het bestuderen.
Zie veel mogelijkheden wat betreft het lezen van data met datareader, dataset en datatable.
Als ik (een deel) van de database in het geheugen wil laden en manipuleren dan begrijp ik het ook wel een beetje. Heel handig om direct te bindin aan controls enzo. Maar ik wil iets waar ik nog geen goede oplossing voor gevonden heb.

Stel ik maak een eenvoudige klantenbestand applicatie. Simpel 1 tabel met klantgegevens.

Ik schrijf een class Klant met diverse property's en de methods
Klant.Bewaar()
Klant.Leesin(ipKlantId)

Nu wil ik bij bewaar controleren of het id al voorkomt en indien ja deze updaten in de database
In Vb6 met ado 2.7 gebruikte ik dan een recordset die ik maakte met een query "Select * from klant where id = {id}"
En dan:
if rs.eof then
(kennelijk een nieuwe)
.addnew
endif
(Velden invullen)
.update

Ik heb al gestunt met het command object en dan directe sql query's uitvoeren"
"Select * from klant where id = {id}"
Dan controleren of deze al bestaat
"Update" of "Insert" kiezen

Ik kan me echter niet voorstellen dat dit de beste oplossing is.

Wie heeft tips voor mij

Acties:
  • 0 Henk 'm!

  • Anno
  • Registratie: Augustus 2009
  • Laatst online: 26-09 12:40

Anno

Griefmaker#2862

Als de property IdKlant 0 of NULL is dan kun je er toch gewoon vanuit gaan dat het om een nieuwe klant gaat. Je voegt hem dan toe en haalt de nieuwe id op en set IdKlant.

[ Voor 7% gewijzigd door Anno op 27-07-2010 09:40 . Reden: *typo ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Op zich lukt het ook wel met Update, en Insert query's maar ik vraag me af of dit de juiste methode is in een dergelijke situatie.

Acties:
  • 0 Henk 'm!

  • bastv
  • Registratie: September 2005
  • Laatst online: 25-09 12:42
ADO.NET kan dit volgens mij niet op een generieke manier.

met NHibernate gebruik ik altijd .SaveOrUpdate(Object o) http://nhforge.org/doc/nh/en/index.html
dit kan ook met entity framwork http://gurustop.net/blog/...-with-entity-framework-4/

Acties:
  • 0 Henk 'm!

  • Tarabass
  • Registratie: Februari 2008
  • Laatst online: 09-04 17:02

Tarabass

Webmaster

Dit soort dingen zijn inderdaad goed te implementeren met het entitie-framework. Wat ook goed werkt is linq-to-sql, of gewoon linq als er al een lijst bekend is. Toch zou ik dit soort zaken afvangen in een stored procedure. Daarin check je of het id van het object groter is dan 0, waardoor je weet wat te doen :)

Acties:
  • 0 Henk 'm!

  • HansvDr
  • Registratie: Augustus 2009
  • Niet online
Ik doe zoiets altijd met een stored procedure, zie voorbeeld hieronder:

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
CREATE PROCEDURE [dbo].[spMijnTabelInsertUpdate]

    @id int,
    @titel nvarchar(50)

    AS

    DECLARE @returnValue int
    
    IF NOT EXISTS (SELECT 1 FROM MijnTabel WHERE Id = @id)
    BEGIN
        INSERT INTO MijnTabel
        (
            Titel
        )

        VALUES
        (
            @titel  
        )

        SELECT @returnValue = SCOPE_IDENTITY()      
    END
    ELSE
    BEGIN
    
        UPDATE MijnTabel SET
            Titel = @titel 
        WHERE
            Id = @id

        SELECT @returnValue = @id
    
    END
    
    IF (@@ERROR != 0)
    BEGIN
        RETURN -1
    END
    ELSE
    BEGIN
    RETURN @returnValue
    END
Pagina: 1