Εμφάνιση εγγραφών μιας ημερομηνίας με asp.net

Πληροφορίες σχετικές με την ASP, ASP.NET και με τις εφαρμογές που είναι γραμμένες με αυτήν.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
mpempe
Δημοσιεύσεις: 156
Εγγραφή: 23 Ιουν 2003 02:48
Τοποθεσία: peloponisos

Εμφάνιση εγγραφών μιας ημερομηνίας με asp.net

Δημοσίευση από mpempe » 10 Οκτ 2015 17:40

Γεια σας
Έχω ένα calendar που κάνοντας κλικ στην κάθε μέρα παράγει ένα url του τύπου http://mysite.gr/news.aspx?Newsdate=10/10/2015
Στη σελίδα news.aspx θέλω να εμφανίσω τις εγγραφές αυτής της ημερομηνίας
Αυτή τη στιγμή έχω sql που εμφανίζει όλες τις εγγραφές που είναι ορατές

Κώδικας: Επιλογή όλων

 Private news As DataTable

    Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
        Dim command As OleDbCommand = New OleDbCommand()
        command.CommandType = CommandType.Text
        command.CommandText = "SELECT * FROM News" & Chr(10) & _
                              "WHERE Visible = True" & Chr(10) & _
                              "ORDER BY LastModified DESC" & Chr(10)
        command.Connection = DB.GetConnection()
        Dim adapter As OleDbDataAdapter = New OleDbDataAdapter(command)
        Me.news = New DataTable()
        adapter.Fill(Me.news)
    End Sub

Αυτό που θέλω να κάνω είναι να μου εμφανίζει μόνο τις εγγραφές της ημερομηνίας του querystring.

Χρησιμοποιώ τον παρακάτω κώδικα για να πάρω από το querystring την ημερομηνία την κάνω μεταβλητή και την εισάγω στο sql , αλλα δε μου αποδίδει τίποτα.
Τυπώνω τη μεταβλητή και παρατηρώ πως γράφει και την ώρα
Π.χ
10/10/2015 12:00:00 πμ

Κώδικας: Επιλογή όλων

Private news As DataTable
Private Newdate As Date

    Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
        Newdate = Page.Request.QueryString("Newdate")[/color]
        Newdate = Convert.ToDateTime(Newdate).ToString("d/M/yyyy")
        Dim command As OleDbCommand = New OleDbCommand()
        command.CommandType = CommandType.Text
        command.CommandText = "SELECT * FROM News" & Chr(10) & _
                              "WHERE Visible = True" & Chr(10) & _
                             "AND LastModified = " & Newdate & Chr(10) & _
                              "ORDER BY LastModified DESC" & Chr(10)
        command.Connection = DB.GetConnection()
        Dim adapter As OleDbDataAdapter = New OleDbDataAdapter(command)
        Me.news = New DataTable()
        adapter.Fill(Me.news)
    End Sub
Τι λάθος κάνω?

ailouros
Δημοσιεύσεις: 212
Εγγραφή: 08 Ιούλ 2015 17:44

Εμφάνιση εγγραφών μιας ημερομηνίας με asp.net

Δημοσίευση από ailouros » 10 Οκτ 2015 22:23

Πρώτα κάποιες παρατηρήσεις άσχετες με αυτό που ρώτησες.

Γιατί χρησιμοποιείς ole objects κι όχι sql objects; Δηλαδή αντί για OleDbCommand το SqlCommand. Αφού συνδέεσαι σε SQL.

Αν απλά θες να εμφανίσεις πληροφορίες δεν χρειάζεσαι Adapter. Βάλε έναν SqlDataReader να βελτιωθεί η ταχύτητα του κώδικα.

Το να βάζεις SQL queries μέσα στον κώδικα σου είναι ό,τι χειρότερο μπορείς να κάνεις από άποψη ασφάλειας. Ούτε καν ελέγχεις αν το query string είναι badly formatted. Αν κάποιος αντί για ημερομηνία περάσει ένα subquery στο query string το περνάς κατευθείαν στο CommandText με αποτέλεσμα να υποστείς SQL Injection. Χρησιμοποίησε stored procedures. Και κάνε επιπλέον ελέγχους στο NewDate. Αν ας πούμε περιέχει οτιδήποτε πέρα από αριθμούς ή / κόφτο.

Όσον αφορά αυτό που ρώτησες. Το πεδίο LastModified στη database σου τι format έχει; Πρέπει να πάρεις το query όπως το στήνεις στον κώδικα να το μεταφέρεις σε ένα query στον SQL Server (μέσα από το Sql Server Management Studio) ώστε να δεις αν δουλεύει. Πρώτα πρέπει να βρεις αν σκάει το query ή ο κώδικας σου. Αν για παράδειγμα το πεδίο είναι date θα πρέπει να περνάς την ημερομηνία στη μορφή ‘YYYY-MM-DD’. Βάλε ένα breakpoint στο NewDate = Page.Request και κάνε debug γραμμή-γραμμή να δεις τι τιμή παίρνει το CommandText στο τέλος.

mpempe
Δημοσιεύσεις: 156
Εγγραφή: 23 Ιουν 2003 02:48
Τοποθεσία: peloponisos

Εμφάνιση εγγραφών μιας ημερομηνίας με asp.net

Δημοσίευση από mpempe » 11 Οκτ 2015 00:33

ailouros γειά σου
Ευχαριστώ για την απάντηση σου

Στο συγκεκριμένο project χρησιμοποιώ ole objects γιατί η βάση δεδομένων είναι Access.

Πρόκειται για ένα παλιό site που του άλλαξα template kai προσπαθώ να κάνω 2,3 βελτιώσεις.
Το πεδίο LastModified στη database είναι date.

Αυτή είναι μια εικόνα του πίνακα

Εικόνα


Το παράξενο είναι πως όταν κάνω κλικ στην ημερομηνία 10/10/2015 παίρνω τις 2 εγγραφές της συγκεκριμένης ημέρας, αντίθετα όταν κάνω κλικ σε άλλη ημερομηνία που υπάρχουν εγγραφές δε μου επιστρέφει τίποτα.
Σε παρακαλώ εξήγησε μου πως μπορώ να κάνω debug γιατί δεν έχω και μεγάλη εμπειρία. Έχω την εντύπωση πως η μορφή της ημερομηνίας δεν είναι σωστή.


Εικόνα
Συνημμένα
1.jpg
2.jpg

ailouros
Δημοσιεύσεις: 212
Εγγραφή: 08 Ιούλ 2015 17:44

Εμφάνιση εγγραφών μιας ημερομηνίας με asp.net

Δημοσίευση από ailouros » 11 Οκτ 2015 03:52

Αν σου δουλεύει στο 10/10 αλλά όχι σε άλλες ημερομηνίες μήπως το format της ημερομηνίας στη βάση είναι US based? Δηλαδή πρώτα ο μήνας και μετά η μέρα, ενώ εσύ περνάς ημερομηνίες με ευρωπαϊκό format, δηλαδή πρώτα ημέρα και μετά μήνα. Έτσι ενώ το 10/10 δουλεύει, το 15/10 σκάει γιατί δεν υπάρχει 15ος μήνας. Πρέπει να δεις αν το locale στο calendar συμβαδίζει με αυτό της βάσης σου.

Για να κάνεις debug πρέπει να πας στο Visual Studio, να κάνεις δεξί κλικ πάνω στην γραμμή του κώδικα που θες να βάλεις το breakpoint κι από το μενού να επιλέξεις Breakpoint->Insert Breakpoint. Θα σου βάλει έναν κόκκινο κύκλο στο αριστερό περιθώριο της οθόνης. Μετά για να τρέξεις το πρόγραμμα πατάς F5 και μπαίνει σε debug mode. Αυτό σημαίνει ότι ξεκινά να εκτελείται το πρόγραμμα και μόλις φτάσει στο breakpoint σταματά και περιμένει να του πεις τι να κάνει. Εκεί πρέπει να το εκτελέσεις γραμμή-γραμμή (πατώντας το F11 κάθε φορά) παρακολουθώντας τις τιμές των μεταβλητών, εν προκειμένω την τιμή του New Date. Αν πας το ποντίκι πάνω σε κάθε μεταβλητή σου δείχνει πληροφορίες. Το breakpoint θα το βάλεις στο Newdate = Page.Request.

mpempe
Δημοσιεύσεις: 156
Εγγραφή: 23 Ιουν 2003 02:48
Τοποθεσία: peloponisos

Εμφάνιση εγγραφών μιας ημερομηνίας με asp.net

Δημοσίευση από mpempe » 11 Οκτ 2015 16:28

ailouros
Ευχαριστώ για τη βοήθεια.

Είχες δίκιο έφτεγε η μορφή της ημερομηνίας που ήταν διαφορετική.
Το διόρθωσα και τώρα λειτουργεί ωραία.

Περισσότερο σε ευχαριστώ για τον ωραίο τρόπο που μου εξήγησες πως μπορώ να κάνω debug.

Νάσαι καλά

ailouros
Δημοσιεύσεις: 212
Εγγραφή: 08 Ιούλ 2015 17:44

Εμφάνιση εγγραφών μιας ημερομηνίας με asp.net

Δημοσίευση από ailouros » 12 Οκτ 2015 01:20

Χαίρομαι που σε βοήθησα. Δύο παρατηρήσεις μόνο. Πρώτον, επιμένω λίγο στο θέμα του SQL Injection. Αν δεν γνωρίζεις τι είναι οι stored procedures και δυσκολεύεσαι να τις υιοθετήσεις τουλάχιστον κάνε περισσότερους ελέγχους για το τι περιέχει η τιμή που τραβάς από το Query string στην Newdate. Κάνε έλεγχο αν περιέχει quotes, διπλά ή μονά κι αν ναι κόφτα, όπως επίσης και δύο συνεχόμενες παύλες. Έτσι όπως είναι τώρα ο κώδικας σου είναι πολύ εύκολο για έναν hacker να σου ρίξει όλο το site κάτω ή ακόμα χειρότερα να διαγράψει όλη σου τη βάση. Περισσότερα για το θέμα μπορείς να δεις εδώ:

https://www.acunetix.com/websitesecurity/sql-injection/
http://www.w3schools.com/sql/sql_injection.asp
https://msdn.microsoft.com/en-us/librar ... 2147217396

Τέλος, την πρώτη φορά που τρέχεις τον κώδικα σε debug mode πάει στο web.config και προσθέτει τη γραμμή:
<compilation debug="true" &#8230;.
Αυτή τη γραμμή θα πρέπει να την αφαιρέσεις όταν θα είσαι έτοιμος να ανεβάσεις το site στον server.

Απάντηση

Επιστροφή στο “ASP, ASP.NET”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες