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

 

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

sqlcommand

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

    Star [*] sqlcommand

    Γεια σας,

    αντιμετωπιζω ενα προβλημα οταν προσπαθω  να τρεξω μια sqlcommand με vb2005 στην οποια το where αφορα ενα διαστημα ημερομηνιων.

    To διαστημα το καθοριζουν δυο datepickers (date1, date2). Και γραφω: "delete from tbl where tbldate between '" & cdate(date1.text).toshortdatestring & "' and '" &  cdate(date2.text).toshortdatestring & "'"

    Ομως επιστρεφει sql exception out of range.

    Με το μονο τροπο που το καταφερα να τρεξει ειναι:

    "delete from tbl where tbltest between '" & Format(Date1.Value, "MM/dd/yyyy") & "' and '" & Format(Date2.Value, "MM/dd/yyyy") & "'"

    Τι κανω λάθος;

  •  28-11-2006, 22:06 21350 σε απάντηση της 21348

    Απ: sqlcommand

    Υποθέτω στην πρώτη περίπτωση είναι λάθος το format της ημερομηνίας. Ας πούμε ο server περιμένει mm/dd/yy και εσύ μέσω του picker δίνεις dd/mm/yy (πχ 28/11/2006 αντί για 11/28/2006, εξού και το out of range exception). Αυτό είναι ένα από τα προβλήματα όταν κατασκευάζεις το query με concatenation. Καλύτερα να χρησιμοποιήσεις parameters ώστε να μην χρειάζεται να ανησυχείς για το πως θα ορίσεις κοινό format στον client και στον server:



    Dim sqlQuery As String = "delete from tbl where tbltest between @startDate and @endDate"

    Dim sqlCmd As New SqlCommand(sqlQuery , sqlCon)

    Dim startDateParameter as new SqlParameter("@startDate", Date1.Value)
    Dim endDateParameter as new SqlParameter("@endDate", Date2.Value)

    sqlCmd.Parameters.Add(startDateParameter)
    sqlCmd.Parameters.Add(endDateParameter)

    'execute the command

    Μπορεί να έχουν λαθάκια τα παραπάνω, δεν έχω Studio μπροστά μου.


    Vir prudens non contra ventum mingit
  •  28-11-2006, 22:06 21351 σε απάντηση της 21348

    Απ: sqlcommand

    Το λάθος σου είναι ότι δε χρησιμοποιείς παραμέτρους Smile, κάτι που σε κάνει ευαίσθητο σε SQL injection attacks.

    Θα πρέπει να το κάνεις:
    string sql = "delete from tbl where tbldate between @from and @to";
    using (SqlCommand cmd = new SqlCommand(sql, connection))
    {
        cmd.Parameters.Add("@from", date1.Value);
        cmd.Parameters.Add("@to", date2.Value);
        cmd.ExecuteNonQuery();
    }


     Υπάρχει βέβαια και το θέμα ότι κάνεις πρόσβαση στη βάση μέσα στον κώδικα της φόρμας, αλλά αυτό ας το αφήσουμε για τη φάση Β.

    Νατάσα Μανουσοπούλου
  •  28-11-2006, 22:29 21352 σε απάντηση της 21348

    Απ: sqlcommand

    Νατάσα, δε θα ήταν καλύτερη μια σύνταξη της μορφής

    cmd.Parameters.Add("@from", SqlDbType.DateTime).Value = date1.value;

    ?
    Μην αφήνετε τα media να σας "ταΐζουν"!
  •  28-11-2006, 23:58 21354 σε απάντηση της 21352

    Απ: sqlcommand

    Στην περίπτωση του DateTime δεν υπάρχει πρόβλημα, είναι μια χαρά η σύνταξη.

    Καμιά φορά όμως μπορεί να την πατήσεις (!) : http://www.knowdotnet.com/articles/parametergotcha.html


    Vir prudens non contra ventum mingit
  •  29-11-2006, 00:34 21355 σε απάντηση της 21348

    Απ: sqlcommand

    Αν τελικά χρησιμοποιήσεις string concutenation, η σωστή μορφή της ημερομηνίας είναι yyyyMMdd HH:mm:ss.tttttttt, ανεξάρτητα από το collation της βάσης και τα regional options. Τα tttttttt είναι υποδιαίρεση του δευτερολέπτου. Νομίζω ότι αν χρησιμοποιείς oracle μπορεί να είναι μέχρι 6 ενώ στον sql server 2000 μέχρι 8.
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  29-11-2006, 01:39 21358 σε απάντηση της 21355

    Απ: sqlcommand

     papadi wrote:
    string concutenation

    Μου άρεσε αυτό! Μαλλον σου ξέφυγε, αλλα είναι ενδιαφέρον λογοπαίγνιο. Σημαίνει μάλλον να κάνεις το string πιό όμορφο! Κατι σαν String.VisitHairSalon() :)

    (Για τα γραφόμενα, είναι concatenation αλλα δεν μπόρεσα να μην πω πάλι τη βλακεία μου :) )

     


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  29-11-2006, 01:53 21361 σε απάντηση της 21348

    Απ: sqlcommand

    Μάνο, για αυτόν ακριβώς το λόγο (και για λόγους clarity) προτιμώ τη λύση που ανέφερα.
    Μην αφήνετε τα media να σας "ταΐζουν"!
  •  29-11-2006, 08:35 21362 σε απάντηση της 21361

    Απ: sqlcommand

    Aααα, νόμιζα ότι το θέμα ήταν "παίζει/δεν παίζει"...

    Κοίτα, το snippet (και νομίζω τα περισσότερα snippets που γράφουμε εδώ) δεν αποτελεί δείγμα production κώδικα. Υποτίθεται ότι δίνεις ένα έναυσμα και από εκεί και πέρα αυτός που το χρησιμοποιεί, το φέρνει στα μέτρα του. Ωστόσο, δεν θα έγραφα σε κώδικά μου cmd.Parameters.Add("SomeParam", SqlDbType.Int).Value = 0 γιατί δεν το θεωρώ και τόσο clear με ένα statement να κάνω δύο πράγματα, θα προτιμούσα να το σπάσω στο Add και στο set. Ίσως και να είναι θέμα coding style, είμαι verbose τύπος αλλά με βολεύει γιατί με προστατεύει όταν γράφω κώδικα ή κάνω debugging και το μάτι έχει αρχίσει να γυαλίζει από την κούραση Big Smile


    Vir prudens non contra ventum mingit
  •  29-11-2006, 08:52 21365 σε απάντηση της 21358

    Απ: sqlcommand

     cap wrote:

     papadi wrote:
    string concutenation

    Μου άρεσε αυτό! Μαλλον σου ξέφυγε, αλλα είναι ενδιαφέρον λογοπαίγνιο. Σημαίνει μάλλον να κάνεις το string πιό όμορφο! Κατι σαν String.VisitHairSalon() :)

    (Για τα γραφόμενα, είναι concatenation αλλα δεν μπόρεσα να μην πω πάλι τη βλακεία μου :) )



    Το μήνυμά σου το έγραψες στις 1:39, τώρα είναι 8:50. Μάλλον είναι αργά και δεν σε πρόλαβα. Για άλλη μια φορά πήρες αφορμή και ήδη έχεις γράψεις ένα επεισόδιο του Ζαχαρία! Smile

    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  29-11-2006, 09:06 21366 σε απάντηση της 21348

    Απ: sqlcommand

    Σας ευχαριστω ολους
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems