Avatar billede torotune Nybegynder
12. juni 2006 - 23:50 Der er 10 kommentarer og
1 løsning

If Nothing - returnér intet

Hej - jeg har et lille problem med nedenstående property som jeg bruger ved indskrivning af en dato til databasen, hvis altså der er en dato i den givne situation. Hvis der der ikke er en dato skal der slet ikke skrives/returneres noget. Som jeg gør det nu, og der ikke er en dato, indsættes der alligevel "01-01-0001 00:00:00", men feltet skal helst bare forblive helt blankt.

Prøver med:   

Public Property Dato() As Date
        Get
            If _Dato = Nothing Then
                Return Nothing
            Else : Return _Dato
            End If
        End Get
        Set(ByVal value As Date)
            _Dato = value
        End Set
    End Property
Avatar billede snepnet Nybegynder
13. juni 2006 - 00:05 #1
Hvis en Date er en DateTime, så kan den ikke være Nothing (det er en valuetype). Hvis du benytter 2.0 kan du lave en nullable DateTime, ellers kan du spørge på
if _Dato = DateTime.MinValue
Mvh
Avatar billede torotune Nybegynder
13. juni 2006 - 09:37 #2
Hej igen, det ser ud til at fungere godt hvis jeg laver:

Dim Dato As Nullable(of DateTime) = Nothing
Den viser ikke længere 01-01-0001 00:00:00 når jeg udskriver objektet.

Men der smides dog en exception når jeg indsætter den i db'en med parameteren @dato:

"Parameter @Dato har ingen standardværdi."
Avatar billede torotune Nybegynder
13. juni 2006 - 09:42 #3
Min property ser således ud nu:

Public Property Dato() As Nullable(of DateTime)
        Get           
            Return _Dato     
        End Get
        Set(ByVal value As Nullable(of DateTime))
            _Dato = value
        End Set
End Property
Avatar billede snepnet Nybegynder
14. juni 2006 - 11:19 #4
Må jeg se den fulde fejlmelding.
Mvh
Avatar billede torotune Nybegynder
15. juni 2006 - 23:30 #5
Hej igen, ja den kommer med noget:

System.Data.OleDb.OleDbException: Parameter @Dato har ingen standardværdi. at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) at System.Data.OleDb.OleDbCommand.ExecuteNonQuery()

Kan det være fordi den gerne vil have defineret en standardværdi i selve feltet i databasen, når der ikke indsættes noget, eller skal der laves en for parameteren?
Avatar billede torotune Nybegynder
16. juni 2006 - 21:37 #6
Skal man ikke på en eller anden på have sat sin parameter DBNull hvis den er tom? Jeg kan ikke helt finde ud af hvordan Nullable(of DateTime) fungerer ...
Avatar billede snepnet Nybegynder
17. juni 2006 - 00:23 #7
Fejle kan komme i lidt forskellige situationer... Det kan godt være det bare er fordi du har flere parametre end værdier i den resulterende sql.
Kan du ikke poste den?
Og jo - du kan tilskrive dbnull til parameteren hvis din property er null.
Mvh
Avatar billede torotune Nybegynder
22. juni 2006 - 11:46 #8
Hej igen, jeg har brugt at indsætte DateTime.Now() i database-feltet hvis dato er tom. Men har stadigvæk brugt Nullable(of DateTime), hvilket gør at jeg kan få vist ingenting (i stedet for 01-01-0001 00:00:00) når jeg fremviser det i et GridView. Så løsningen fungerer godt til formålet :-)
Avatar billede snepnet Nybegynder
28. juni 2006 - 20:22 #9
Alletiders :o)
Mvh
Avatar billede torotune Nybegynder
29. juni 2006 - 18:12 #10
Læg et svar alligevel. Nullable(of datetime) blev brugt til løsningen. Mvh. :-)
Avatar billede snepnet Nybegynder
30. juni 2006 - 11:16 #11
Ok :o)
Mvh
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