Avatar billede mema Nybegynder
10. oktober 2007 - 19:26 Der er 6 kommentarer og
1 løsning

GridView og DetailsView - Update virker ikke ved Null i DB

Jeg har en SQL database med 5 tabeller. 4 tabeller er blevet joinet til den 5. med deres ID.
Vha. en skema putter jeg data i 5. database og dette kører fint. Bortset fra ID har alle felter sat til 'Allow Null'.

På en anden side har jeg en GridView, der viser oversigt på rækkerne. Også her har jeg en DetailsView, der skal vise og opdatere den række, som man har Selected på GridViewet. Det gør det også (opdaterer fint) bortset fra, at hvis jeg sletter indholdet af et felt (3 felter skulle gerne opdateres), så feltet i DetailsView vises tømt, og det er også OK, men når jeg igen udfylder et tømt felt med data, accepteres de ikke og der står stadigvæk Null i databasen. Noget forslag?

Her er UpdateCommand, som VS genererer selv:

UpdateCommand="UPDATE [Resultat] SET [Initialer] = @Initialer, [Oplysning_sendt] = @Oplysning_sendt, [BesvarelseID] = @BesvarelseID WHERE [ResultatID] = @original_ResultatID AND [Initialer] = @original_Initialer AND [Oplysning_sendt] = @original_Oplysning_sendt AND [BesvarelseID] = @original_BesvarelseID">

Hvad kan der være fejlen?
Avatar billede karl-koder Nybegynder
10. oktober 2007 - 21:17 #1
Jeg ved ikke om det gør en forskel men har du prøvet at køre din sql direkte på databasen i et query vindue bare for at se om den så også fejler der ?
Avatar billede mema Nybegynder
10. oktober 2007 - 23:09 #2
Jo. Det kører fint og opdaterer databesen. Jeg skriver i queryBuilder:

UPDATE Resultat SET
    Initialer = 'JJ',
    Oplysning_sendt = 'Ja ja',
    BesvarelseID =  '1'
    WHERE ResultatID = '35'
Og det execuerer fint.
Avatar billede neoman Novice
11. oktober 2007 - 16:04 #3
Det går galt i WHERE betingelsen. Hvis der er et null i et af felterne i forvejen, så fejler din Update, da udsagnet hvad_som_helst=original_værdi(og denne er Null)  altid er falskt.
Avatar billede mema Nybegynder
12. oktober 2007 - 09:40 #4
Så har jeg fjernet andre hvad_som_helst=original_værdi bortset fra ResultatID=@original_ResultatID og det virker fint.
Hvis dette har været problemet, så er det nu løst.
Send venligst et svar:-)
Avatar billede neoman Novice
12. oktober 2007 - 10:14 #5
Både og. Du har tydeligvis klikket på Optimistic Concurrency da du lavede din DataSource. VS er ikke smart nok til at lave sql'en rigtigt, når du har felter som tillader  NULLS.

Meningen var at hindre at data blev gemt, hvis en anden bruger modificerede data i den tid der var gået mellem læsning af data i din session, og gemning af dem. Det gør den ved at kigge på om alle felterne  i en række stadig har den samme værdi [Værdi] inden gemning, som de havde da felterne blev læst  (@original_Værdi). Men hvis du tillader NULLs så skal man også teste på om der har været et NULL :
(værdi=@original_Værdi) OR (værdi IS NULL AND @original_Værdi IS NULL)

Hvis du ønsker have Optimistic Concurrency, så skal du ikke bare smide de ting ud men sørge for at sql'en er rigtig. Hvis du ike ønsker Optimistic Concurrency, så er det jo nemmest ikke at afklikke det felt, når du laver data sourcen.
Avatar billede mema Nybegynder
12. oktober 2007 - 14:13 #6
Tak for svaret.
Jeg har tilføjet både i prantesis stående sætninger (bortset fra ResultatID - Det kan jo ikke acceptere NULL):

...WHERE [ResultatID] = @original_ResultatID AND ([Initialer]=@original_Initialer OR ([Initialer] IS NULL AND @original_Initialer IS NULL)) AND ...

Skriv venligst hvis det ikke er rigtig.
Avatar billede neoman Novice
12. oktober 2007 - 14:18 #7
det ser rigtigt ud - og nu burde det virke også med NULL.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester