Ο λόγος που όποιος έχει δουλέψει με AS400 δεν απάντησε είναι επειδή η αρχική ερώτηση είναι εξαιρετικά ασαφής. Το AS400 είναι μηχάνημα, όχι εφαρμογή ή βάση δεδομένων. Όταν ρωτάς "Πως μπορώ να τραβήξω δεδομένα από το AS400" είναι σαν να λες "Πως μπορώ να τραβήξω πληροφορίες από το Windows 2008". Τα δεδομένα μπορεί να είναι σε κάποια βάση DB2 ή σε flat files. Ακόμα και σε DB2 να είναι όμως, πάλι σε flat files αποθηκεύονται και πολλές εφαρμογές μιλάνε απευθείας με τα flat files.
Ακόμα όμως και αν ξέρεις ότι τα δεδομένα είναι σε DB2 έχεις το θέμα ΠΩΣ θα μιλήσεις με τη DB2. Χρησιμοποιεί διαφορετικούς drivers από την DB2 για άλλα λειτουργικά και η IBM χρεώνει χοντρά. Κατά κανόνα σου προτείνει να χρησιμοποιήσεις ODBC το οποίο όμως είναι γελοιωδώς αργό. Οι άνθρωποι έχουν μείνει κυριολεκτικά 15 χρόνια πίσω, όταν η δημιουργός του ODBC Microsoft το αντικατέστησε με το OLE DB. Η IBM έχει βγάλει και κάποιους .NET drivers αλλά τους χρεώνει και αυτούς, ανάλογα με την έκδοση του access πακέτου που έχεις αγοράσει εσύ ή ο πελάτης σου. Αν έχεις έκδοση 5 π.χ. θα πάρεις .NET 1.1. Αν θέλεις .ΝΕΤ 2.0, να αγοράσεις την 6. Τέλος, οι drivers της IBM έχουν πρόβλημα με τα codepages καθώς θεωρούν ότι πρέπει ντε και καλά να μεταφράσουν τα strings στο system locale του client, άσχετα από τη γλώσσα του χρήστη ή αν τα αρχικά δεδομένα είναι Unicode. Άντε να περάσεις κυριλλικά σε ελληνικό μηχάνημα ....
Όλως περιέργως, τους καλύτερους και γρηγορότερους drivers τους βγάζει δωρεάν η .... Microsoft, στο Feature Pack του SQL Server! Εκεί υπάρχει ένας OLE DB driver για iSeries ο οποίος είναι πολύ γρήγορος, φυσικά δουλεύει σωστά με τα Unicode και τα codepages αλλά .... εγκαθίσταται μόνο αν βρει SQL Server Enterprise ή Developer στο μηχάνημα, καθώς βγήκε για να μπορεί ο SQL Server να τραβάει δεδομένα από την DB2, όχι για να πάει κόντρα στην IBM.
Τέλος, εφόσον έχεις συνδεθεί μέσω ADO.NET με τη DB2 μπορείς να γράψεις απλό ADO.NET κώδικα για να τραβήξεις δεδομένα. Απλά θα πρέπει να προσέξεις ότι η DB2 δεν έχει ακριβώς πίνακες και schemas αλλά μπλέκει και catalogs στη μέση. Μην ξεχνάς ότι στην πραγματικότητα οι "πίνακες" σου είναι αρχεία που αποθηκεύονται σε folders. Έτσι ίσως χρειαστεί αντί για το όνομα του πίνακα στο select να δώσεις <catalog>.<schema>.<table>, για παράδειγμα SELECT * FROM MyCatalog.MySchema.MyTable
Τέλος, Zeon, δεν υπάρχει κανένας λόγος να χρησιμοποιήσει τα AppSettings για να φτιάξεις ένα connection string. Αυτό είναι κατάλοιπο του .NET 1.0 και να πω την αλήθεια δεν καταλαβαίνω γιατί πολλοί το χρησιμοποιούνε ακόμα. Μπορείς να προσθέσεις άνετα οποιοδήποτε είδος settings στην εφαρμογή σου, ακόμα και Connection string μέσω των properties του Project σου, από το tab Settings. Μετά μπορείς να το διαβάσεις στον κώδικα απλά με ένα Settings.Default.MyConnectionString αντί γι αυτό που γράφεις.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos