Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Γενικά περί ADO.Net και ένα πρόβλημα με Access Dates

Îåêßíçóå áðü ôï ìÝëïò tigrakas. Τελευταία δημοσίευση από το μέλος tigrakas στις 10-10-2006, 11:30. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  09-10-2006, 11:11 18287

    Γενικά περί ADO.Net και ένα πρόβλημα με Access Dates

    Καταρχήν καλημέρα σε όλη τη παρέα,

    Μετά τη μετάβασή μου σε ADO.Net ομολογώ ότι έχω χάσει λίγο τη μπάλα και δε ξέρω που πανε τα 4. Είχα που είχα κάτι χρόνια να πιάσω τη VB6 τώρα φαίνονται όλα βουνό. Για αυτό και θέλω λίγο τη βοήθειά σας. Γράφω σε VB.Net ένα πρόγραμμα και ενώ έχω ρίξει πολλές ώρες διάβασμα δε μπορώ να καταλάβω τη σημασία των DataAdapter,DataReader,DataSet και DataTable. Για ποιο λόγο θα χρησιμοποιούσε κανείς και τι για να βάλει δεδομένα σε ένα datagridview; Αυτό που έχω συλλάβει μέχρι στιγμής είναι ότι το DataAdapter ανοίγει και κλείνει μόνο του τη σύνδεση που θα του δηλώσεις καθώς επίσης ότι το DataSet μπορείς να το γεμίσεις με δεδομένα (Fill) από ένα DataAdapter και να τα χειρίζεσαι offline μετά (Πολλά tables όμως ή ένα μόνο; δε ξέρω...). Θα ήθελα λοιπόν λίγο τη βοήθειά σας σε κάποια πραγματάκια για να καταλάβω πως δουλεύουν γιατι από τα samples και τα e-books έχω μπερδευτεί πολύ. Προς στιγμήν επίσης επειδή καίγομαι αν είναι εύκολο να με βοηθήσει κανείς σε τρία πραγματάκια:

    α) Ενω διαβάζω κανονικά τα δεδομένα ενός πεδίου από την εντολή getvalue = reader("field_name").Value (Νομίζω .Value ότι είναι δεν είμαι μπροστά στο κώδικα τώρα) δε μπορώ να διαβάσω πεδία που περιέχουν ημερομηνίες. Το reader είναι OleDbDataReader και η βάση σε Access 2003. Έχω δηλώσει τη getvalue ως Datetime καθώς επίσης και ως string και έκανα μετά CType αλλά τίποτα απο αυτά δεν έπαιξε. Πιθανολογώ ότι δεν είναι ο σωστός τρόπος να διαβάσεις τα δεδομένα ενός πεδίου είναι όμως ο μόνος τρόπος που βρήκα για να διαβάσω δεδομένα με το field_name ενός πεδίου πίνακα και όχι με το Index του.

    β) Έχω ένα dateTimePicker control στο οποίο όμως όταν ανοίγει η φόρμα που το περιέχει δε μπορώ να του θέσω Null value. Γιατί; τι μπορώ να κάνω για αυτό; Μου αρέσει αρκετά το controlaki αυτό και δε θέλω να βάλω text και δωσ' του κώδικα μετά για έλεγχο ημερομηνιών.

    γ) Στην access πως μπορώ να ορίσω το format σε 31/12/2006 και όχι 12/31/2006; οι επιλογές που έχει όποια και να βάλω στο retrieve που κάνω επιστρέφει τη δεύτερη μορφή.

    Αυτά. Συγνώμη αν σας κούρασα

    Ευχαριστώ :)
  •  09-10-2006, 21:31 18331 σε απάντηση της 18287

    Απ: Γενικά περί ADO.Net και ένα πρόβλημα με Access Dates

    Ίσως το πρόβλημά σου είναι οτι το συγκεκριμένο πεδίο έχει null τιμή στη βάση. Σε αυτή την περίπτωση, η τιμή που θα σου γυρίσει ο εκάστοτε DataReader είναι η DBNull.Value, η οποία δυστυχώς δεν είναι cast-able σε .. οτιδήποτε ! :D

    Οπότε δοκίμασε πρώτα να σώζεις την τιμή σε μια μεταβλητή τύπου Object, ελέγχεις αν όντως είναι DateTime και όχι DBNull ... και πράττεις τα ανάλογα.

    Π.χ. ...

    Dim oValue As Object = reader("field_name")

    if not isNothing(oValue) AndAlso not oValue.GetType() is GetType(DBNull) then

    ... I have a DateTime value code here ...

    Else

    .. I have a DBNull value code here ...

    End If

    Αφήνω ανοιχτό το ενδεχόμενο ο παραπάνω κώδικας να μην είναι απόλυτα σωστός, το γράφω απο μνήμης, ίσως και να μην είναι ο ενδεδειγμένος τρόπος. Ψάξε το λίγο και στο MSDN Help, να δείς τα interfaces και τι μεθόδους σου δίνουν, π.χ. αν δούλευες με το ndex αντί για το field name, ο DataReader έχει μέθοδο IsDBNull(int columnIndex) υ σου γυρίζει boolean.

    Καλή τύχη ! :D
    Angel
    O:]
  •  09-10-2006, 21:47 18332 σε απάντηση της 18331

    Απ: Γενικά περί ADO.Net και ένα πρόβλημα με Access Dates

    Και να μην ξεχνάμε και την OleDbDataReader.IsDBNull(ordinal) !
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  10-10-2006, 02:00 18341 σε απάντηση της 18287

    Απ: Γενικά περί ADO.Net και ένα πρόβλημα με Access Dates

    Ξεκίνα σιγά-σιγά και μεθοδικά. Το ADO.NET έχει πολύ περισσότερο βάθος από το ADO. Διάβασε για να εξοικειωθείς με την τεχνολογία και μην προσπαθήσεις ό,τι διαβάζεις να το εφαρμόσεις αμέσως στο project σου. Ρίξε μια ματιά σε αυτά τα Hands On Labs http://msdn.microsoft.com/virtuallabs/data/default.aspx Θα βρεις πολύ υλικό αν ψάξεις στο Google με τις κατάλληλες λέξεις κλειδιά (ADO.NET tutorial, κλπ).

    Καλό αγώνα!

     


    Vir prudens non contra ventum mingit
  •  10-10-2006, 09:49 18360 σε απάντηση της 18287

    Απ: Γενικά περί ADO.Net και ένα πρόβλημα με Access Dates

    Ευχαριστώ πολύ παιδιά για τις απαντήσεις σας. Το (α) και το (γ) το έλυσα. Με το (β) καμιά ιδέα;
  •  10-10-2006, 09:55 18361 σε απάντηση της 18360

    Απ: Γενικά περί ADO.Net και ένα πρόβλημα με Access Dates

    Γενικά, σε όλα τα controls είναι δύσκολη η απεικόνιση των null τιμών γιατί έστω και το κενό, δεν είναι null. Γι αυτό μερικά controls (πχ τα grids) έχουν ρυθμίσεις στα properties για το τι θα δείξουν όταν έρχεται τιμή null (με αυτόν τον τρόπο, κάποιος μπορεί να ρυθμίσει να δείχνει το κενό, άλλος το "N/A", άλλος "<άγνωστο>", κλπ). Για το datetimepicker, ρίξε μια ματιά εδώ: http://www.windowsforms.net/FAQs/default.aspx?PageID=2&ItemID=111&CategoryID=3&tabindex=3 Επίσης, στο google αν βάλεις ως keywords "datetimepicker null" θα βρεις αρκετές λύσεις.
    Vir prudens non contra ventum mingit
  •  10-10-2006, 11:30 18377 σε απάντηση της 18361

    Απ: Γενικά περί ADO.Net και ένα πρόβλημα με Access Dates

     KelMan wrote:
    Επίσης, στο google αν βάλεις ως keywords "datetimepicker null" θα βρεις αρκετές λύσεις.


    Έχεις δίκιο man απλά το ψιλοαποφεύγω τελευταία γιατί τρώω ώρες ατελείωτες χωρίς να βρίσκω άκρη. Σορρυ αν σας ψιλοπρήζω πάντως ε :)
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems