Παναγιώτης Καναβός:
xakou, υποψιάζομαι ότι τώρα ξεκίνησες και με ASP.NET αλλά και με ADO.NET. Ο αρχικός σου κώδικας θα ήταν κυριολεκτικά τρομακτικός αν τον έβλεπα σε εμπορική εφαρμογή ή σε web site. Περνάς παραμέτρους στο URL όπου μπορεί οποιοσδήποτε να τις παραποιήσει, δεν κάνεις κανένα έλεγχο ότι η παράμετρος είναι αυτό που περιμένεις, μετά κολλάς την παράμετρο στο query string. Με τον τρόπο αυτό είσαι ορθάνοιχτος ακόμα και στο απλούστερο SQL Injection attack.
Μην ξεχνάς ότι το Internet είναι γεμάτο scripts που μπορεί να τρέξει ο κάθε άσχετος για να βρει ευάλωτα sites.
Θα σου πρότεινα να μάθεις μία τεχνολογία τη φορά. Αν προσπαθήσεις να μάθεις ταυτόχρονα και το SqlDataSource και πως δουλεύει το ADO.NET θα μπλεχτείς άσχημα (όπως ήδη συμβαίνει). Αυτή τη στιγμή υποψιάζομαι ότι τα λάθη που αφορούν το ASP.NET νομίζεις ότι αφορούν το ADO.NET και το αντίστροφο. Τα parameterized queries δουλεύουν. Το ίδιο και το SQL Data Source. Δοκίμασε πρώτα να γράψεις ένα σωστό SqlCommand, μετά δοκίμασε να φτιάξεις ένα SqlDataSource ΧΩΡΙΣ QueryStringParameter για να δεις πως δουλεύει το ADO.NET. Αυτό απλά για να βεβαιωθείς ότι δεν υπάρχουν φαντάσματα.
Μετά, πρόσεξε πως περνάς την παράμετρο. Από τη στιγμή που δεν είναι δυνατόν να περάσουν τα Ελληνικά στο URL θα γίνουν encode. Αν περάσει την encoded παράμετρο όπως είναι, δεν θα έχεις αποτελέσματα. Η παράμετρος θα πρέπει να γίνει decode. Αν το SqlDataSource δεν έχει κάποια παράμετρο η οποία να ενεργοποιεί το decoding θα πρέπει να το κάνεις μόνος σου.
Επίσης, να επαναλάβω για Νοστή φορά ότι οι ερωτήσεις πρέπει να γίνονται στο κατάλληλο φόρουμ. Αν όχι τίποτε άλλο, όταν σκέφτεσαι που να κάνεις την ερώτηση την καταλαβαίνεις καλύτερα. Είχε καμμία σχέση η ερώτηση σου με WinForms και desktop development? Καμμία. Έχει όμως σχέση με ASP.NET και ADO.NET. Εκεί πρέπει να κάνεις την ερώτηση και σε αυτή την κατεύθυνση πρέπει να ψάξεις για την απάντηση.
Παναγιώτη έχεις δίκιο, είμαι καινούργιος στην ASP.NET και ADO.NET . Διάβασα για sql injection attacts και για αυτό αλλάζω τον κώδικα. Σαν ερώτηση βέβαια πάνω σε αυτό πως μπορεί ο hacker να βρει το όνομα του table και να το κάνει drop ;
Δγλαδή αν κατάλαβα καλά μου λες από το παρακάτω να βγάλω το QueryStringParameter ; Δεν πρέπει να δηλωθεί η μεταβλητή @perioxh ;
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionStringMark %>"
SelectCommand="select * FROM demotable where region=@perioxh and extra='2' ">
<SelectParameters>
<asp:QueryStringParameter Name="perioxh" QueryStringField="perioxh" Type="String" />
(στην παράγραφο σου 3 δεν πήγα ακόμα)
Αν νομίζεις πως πρέπει να μετακινηθεί το θέμα σε παρακαλώ κάντο. Μην ξεχνάς πως είμαι αρχάριος όπως λέω και παραπάνω και κάνω ΑΠΕΙΡΑ λάθη. Πολλές φορές εμένα δεν με βοηθάνε και πολύ τα λόγια ή οι χαρακτηρισμοί. Πολύ σωστά αυτά που λες παραπάνω, αλλά θα προτιμούσα να δω και λίγο κώδικα για να το καταλάβω καλύτερα.
Περιμένω με αγωνία την απάντηση σου, γιατί έχω μπλοκάρει...
edit-------------------------
περνάω την παράμετρο με query string από την 1 σελίδα στη 2 endcoded
Dim targetURL As String
targetURL = "~/results.aspx?"
targetURL &= "perioxh=" & Server.UrlEncode(perioxh.Text)
Response.Redirect(targetURL)
Μήπως πρέπει να κάνω πρώτα decode όπως λες παραπάνω; Πως το κάνω;