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

 

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

insert kai date

Îåêßíçóå áðü ôï ìÝëïò DaltonGR. Τελευταία δημοσίευση από το μέλος KelMan στις 18-01-2007, 11:13. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  17-01-2007, 14:19 23666

    insert kai date

    Μια ερώτησ βρε παιδιά,

    όταν κάνω insert σε μια βάση δεδομένων σε πεδίο ημερομηνία και ώρα, μου καταχωρεί 1900 03 01 00:00:00

    ενώ χρησιμποποιώ την ημερομηνία και ώρα του συστήματος

    λίγο κώδικας

    Dim hmerominia As Date = Date.Today.ToShortDateString

    Dim sqlUpdateMetrInves As String = "Insert into MetrInves(MetrID,ParoxID,PerID,UserID,HmMetr) values(" & MaxMetrID + 1 & ",'" & txtMetrID.Text & "','" & SettingsForm.txtPeriID.Text & "','" & LoginForm.txtUserID.Text & "'," & hmerominia & ")"

    βλέπετε κάποιο λάθος???

  •  17-01-2007, 14:28 23669 σε απάντηση της 23666

    Απ: insert kai date

    Καταρχήν, άσχετο, αλλά η χρήση string concatenation είναι επικίνδυνη για λόγους ασφαλείας. Ψάξε για sql injection στο google.

    Στο ερώτημά σου τώρα.

    Παρατήρηση 1:Εφόσον χρησιμοποιείς Sql server ή oracle, η ημερομηνία πρέπει να μπει στο sql statement σου με την μορφή yyyyMMdd HH:mm:ss.tttt ή yyyyMMdd εφόσον δεν σε ενδιαφέρι η ώρα, ανεξάρτητα από τα regional options του server. Οπότε η σωστή σύνταξη είναι:

    ..... ," & Date.Today.ToString("yyyyMMdd") & ",.....

    Παρατήρηση 2: Η πρώτη γραμμή σου είναι αρκετά λάθος. Θέτεις ένα string σε μεταβλητή τύπου Date. Αυτό είναι ένα λάθος που επιτρέπει η vb.net με το default configuration της. Καλό θα ήταν να το αλλάξεις αυτό, έτσι ώστε ο compiler να το θεωρεί λάθος. Θα σε αποτρέψει από πολλά λάθη που διαφορετικά θα τα έβλεπες στο runtime. Πάνε στα project properties, στο compile tab και θέσε On στο Option Strict. Θα δεις ότι πλέον ο compiler θα το θεωρήσει λάθος.
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  17-01-2007, 14:50 23673 σε απάντηση της 23666

    Απ: insert kai date

    έχεισ δίκιο φίλε μου για το sql injection το κοίταξα και το θα το αλλάξω.

    άλλαξα τον κώδικα ώς εξής :

    Dim hmerominia As Date = CDate(Date.Today.ToString("yyyyMMdd HH:mm:ss.tttt"))

    Dim sqlUpdateMetrInves As String = "Insert into MetrInves(MetrID,YdrMetrParoxID,YdrMetrPerID,UserID,YdrMetrHmMetr) values(" & MaxMetrID + 1 & ",'" & txtMetrID.Text & "','" & SettingsForm.txtPeriodosID.Text & "','" & LoginForm.txtUserID.Text & "'," & hmerominia & ")"

    αλλα χτυπάει invalidcastexception

  •  17-01-2007, 15:05 23675 σε απάντηση της 23673

    Απ: insert kai date

    Ο σωστός τρόπος να κάνεις αυτό που θέλεις, όπως σου επεσήμανε κι ο Δημήτρης, είναι με παραμέτρους, και όχι με concatenation. Αν παραβλέψουμε αυτό προσωρινά, σου προτείνω το παρακάτω:

    Dim hmeromhnia As String = Date.Today.ToString("dd/MM/yyyy")
    Dim sqlUpdate As String  = "INSERT INTO MetrInves(MetrID,YdrMetrParoxID,YdrMetrPerID,UserID,YdrMetrHmMetr)
    values("
    & MaxMetrID + 1 & ",'" & txtMetrID.Text &
    "','" & SettingsForm.txtPeriodosID.Text & "','" &
    LoginForm.txtUserID.Text & "', CONVERT(datetime, '" & hmerominia & "', 103))"


    όπου η μορφή 103 για την CONVERT είναι η ίδια με το dd/MM/yyyy.

    Αλλά -- καλύτερα κάνε το με παραμέτρους. Έτσι γλιτώνεις και τις έγνοιες για τη μορφή της ημερομηνίας!

    Νατάσα Μανουσοπούλου
  •  17-01-2007, 18:18 23685 σε απάντηση της 23666

    Απ: insert kai date

    Γιατί CONVERT? Ο SQL Server τουλάχιστον καταλαβαίνει το format yyyyMMdd χωρίς να χρειάζεται conversions. H Date.Today.ToString("yyyyMMdd") θα κάνει τη δουλειά και δεν θα χρειαστούν καθόλου conversions. Παρόλα αυτά, εξακολουθεί να είναι κακή λύση το concatenation.

    ...

    Έχει προσέξει κανείς πόσο συχνά πλέον απαντάμε σε παρόμοιες ερωτήσεις?
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  17-01-2007, 19:03 23686 σε απάντηση της 23673

    Απ: insert kai date

    Αν και η ερώτηση ήδη απαντήθηκε... άλλαξε το παρακάτω...
     DaltonGR wrote:


    Dim hmerominia As Date = CDate(Date.Today.ToString("yyyyMMdd HH:mm:ss.tttt"))


    με...

    Dim hmerominia As String = Date.Today.ToString("yyyyMMdd HH:mm:ss.tttt")
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  18-01-2007, 11:01 23701 σε απάντηση της 23666

    Απ: insert kai date

    ευχαριστώ παιδιά..

    λύθηκε το πρόβλημα και χρησιμοποίησα prepared statements όπως μου προτείνατε..

    καλύτερα και πιο δομημένα έτσι...

    και κάτι ακόμα..

    χρησιμοποιό rda pull kai push..

    πώς μπορώ να βάλω ένα progress bar και κατα την διαδικασία pull/push να φαίνεται οτι κάτι γίνεται...

    ψάχνω σε άλλα forum αλλά τίποοτα

    ευχαριστώ και πάλι

  •  18-01-2007, 11:13 23702 σε απάντηση της 23666

    Απ: insert kai date

    Αφού λύθηκε το πρόβλημά σου, όρισε ότι το "Κατάσταση Ενότητας" στο πρώτο σου post και τα "Σας βοήθησε η απάντηση" στα posts που σε βοήθησαν.

    Το ερώτημα που έθεσες είναι καλύτερα να το βάλεις σε νέο post στην κατάλληλη ενότητα. Αν κάποιος ξέρει περί RDA και progress bar πώς θα το δει να απαντήσει αν βρίσκεται εδώ το ερώτημα; Επίσης αν στο μέλλον κάποιος έχει το ίδιο πρόβλημα θα βρει πιο εύκολα την απάντηση που ψάχνει.
    Vir prudens non contra ventum mingit
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems