Μαααααα .... η CreateObject και το ADODB.Connection δεν έχουν σχέση με το ADO.NET και την ASP.NET! Έχει σχέση με την ASP και το ADO, τεχνολογίες ξεχασμένες από το 2002!
Η CreateObject δημιουργεί ένα ActiveX αντικείμενο, στην περίπτωση σου το ADODB.Connection. Η κλάση αυτή καθώς και η ADODB.Command, ADODB.Recordset χρησιμοποιούνταν από την ASP και την VB6. Και αυτές υποστηρίζουν unicode, αλλά θέλουν περισσότερη προσοχή. Αν δούλευες σε VB6 πάλι δεν θα χρειαζόσουν να καρφώσεις πουθενά τη γλώσσα, στην περίπτωση σου όμως κάπου υπήρξε πρόβλημα κατά την μετατροπή από τον τύπο BSTR που χρησιμοποιεί το ADO σε .NET String. Τα πάντα εξαρτώνται από τον κώδικα που είχες γράψει (και δεν δίνεις εδώ).
Έχω μερικές παρατηρήσεις για τον κώδικα σου πάντως. Η ASP.NET είναι αρκετά διαφορετική από την PHP και παρακάμπτει πολλούς από τους περιορισμούς της. Θα πρέπει να μάθεις πως δουλεύει το ADO.NET και η ASP.NET πρώτα για να αποφύγεις κάποια συνηθισμένα λάθη.
- Καταρχήν, δεν χρειάζεται και ΔΕΝ ΠΡΕΠΕΙ να καρφώσεις το Connection String στον κώδικα σου. Είναι θέμα ασφάλειας αλλά και έτσι αποφεύγεις να ξανακάνεις compile τον κώδικα κάθε φορά που κάποιος αλλάζει το connection string. Κάθε web application έχει τα δικά του settings τα οποία αποθηκεύονται στο web.config. Στο Visual Studio τα βλέπεις μέσα κάνοντας δεξί κλίκ στο project σου και επιλέγοντας properties. Υπάρχει ειδικός τύπος setting για τα connection strings. Την τιμή των connection strings την βλέπεις πολύ εύκολα μέσω της global κλάσης Settings (στην C#, δεν θυμάμαι αν είναι η ίδια στην VB.NET).
- Καλύτερα να χρησιμοποιείς Integrated Security παρά sql username και password. Είναι πάλι θέμα ασφάλειας καθώς έτσι δεν χρειάζεται να αποθηκεύσεις πουθενά το password του connection. Θα πρέπει όμως να προσθέσεις το account του application pool του site σου στον SQL Server. Το default είναι το "Network Service".
- Αντί για χύμα SQL πρέπει να χρησιμοποιείς parameterized queries. Στην περίπτωση σου δεν περνάς καμμία παράμετρο, αλλά υποψιάζομαι ότι αν ήθελες να βάλεις ένα where θα το κόλλαγες απλά στο SQL string. ΚΑΚΟ. Κάτι τέτοιο θα σε άφηνε έκθετο σε SQL Injection attacks. Αν περνάς μία τιμή ως παράμετρο όμως ο κίνδυνος εξαφανίζεται. H PHP δεν υποστηρίζει parameterized queries, το ADO.NET όμως το επιτρέπει πολύ εύκολα. Και το παλιό ADO το επέτρεπε.
- Αντί να κλείνεις το reader και το connection με το χέρι μπορείς να χρησιμοποιήσεις το Using keyword για να κλείσουν αυτά αυτόματα, ακόμα και σε περίπτωση exception. Τώρα δεν έχεις κανένα exception handler, οπότε αν συμβεί κάτι περίεργο θα ξεμείνουν ανοιχτά τα connection, reader.
- Είναι προτιμότερο να φτιάχνεις σελίδες με code-behind κλάσεις παρά να ανακατεύεις στην ίδια σελίδα κώδικα και HTML. Τα πράγματα γίνονται πολύ πιο ξεκάθαρα έτσι.
- Αντί να γράφεις τις τιμές του DataReader μία-μία μπορείς να χρησιμοποιήσεις ένα DataGridView ή κάποιο άλλο databound control για να δείξεις απευθείας τα αποτελέσματα του query. Έτσι θα έχεις πολύ καλύτερο έλεγχο στην HTML που δημιουργείται απ' ότι τώρα, θα έχεις υποστήριξη για CSS και άλλα καλούδια. Τώρα, πρέπει να είσαι σίγουρος ότι δημιουργείς σωστό HTML. Χρησιμοποιώντας ένα έτοιμο control, αυτό το αναλαμβάνει το control.
Για να δεις πως γίνεται αυτό, φτιάξε ένα Data Connection στη βάση σου από τον Server Explorer και τράβα τον πίνακα pages επάνω στη φόρμα σου. Το Visual Studio θα δημιουργήσει αυτόματα τις κατάλληλες κλάσεις για να δείξει τα περιεχόμενα του πίνακα. Θα δεις ότι ο κώδικας είναι πολύ λίγος.
Η ASP.NET δεν είναι PHP, έχει πολύ περισσότερες δυνατότητες. Θα πρέπει πρώτα να εξοικειωθείς με αυτή, και το ADO.NET πρωτού αρχίσεις να δουλεύεις με αυτή. Και "O SQL Server δεν θέλει κόλπα για να υποστηρίξει ελληνικά!"
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos