Εξακολουθείς να επιμένεις ότι η βάση επιστρέφει string αντί για numeric στα numeric πεδία. Η εντελώς περιττή replace που έχεις στο query μόλις μετέτρεψε το tziros σε text στη ΒΑΣΗ, χρησιμοποιώντας το collation της ΒΑΣΗΣ. Το αποτέλεσμα της replace θα είναι ένα string το οποίο μπορεί να σημαίνει οτιδήποτε, ανάλογα με το ποιό locale θα χρησιμοποιήσεις για να το μεταφράσεις. Έχεις ήδη χάσει τα αρχικά σου δεδομένα από τον server.
Για να πεισθείς ότι ο ήλιος ανατέλει στην ανατολή, κάνε το εξής. Φτιάξε μία άλλη βάση, με ένα μόνο πίνακα, με ένα numeric πεδίο. Όχι float, γιατί το float αντιστοιχεί σε floating point και έχει περιορισμένη ακρίβεια. Όχι ότι επηρεάζει την μορφή με την οποία θα διαβάσεις τα δεδομένα, απλά για να μην έχεις τυχόν απώλειες λόγω στρογγυλοποιήσεων.
Γράψε 2-3 εγγραφές στον πίνακα και μετά διάβασε τες σε ένα datatable χωρίς ΚΑΜΜΙΑ μετατροπή.
Ύστερα ή βάλε ένα breakpoint μετα το Read για να δεις τί περιέχει το DataTable, ή κάνε assign τις αριθμητικές τιμές που διάβασες σε decimal variables με απλό cast. Στη μία περίπτωση, θα δεις ότι οι στήλες που διάβασες είναι decimal. Στη δεύτερη θα δεις ότι ΔΕΝ θα σκάσει το cast, κάτι που θα συνέβαινε αν είχες διαβάσει string.
Αφού πεισθείς για αυτό, μένει να δεις τί σου επιστρέφει το web service. Αν υπάρχει πουθενά το schema, κοίτα τί data type χρησιμοποιεί για τα αριθμητικά πεδία. Αν είναι text, έμπλεξες καθώς θα πρέπει να μαντέψεις τί collation σου επιστρέφει το service και να κάνεις μετατροπή από την text τιμή σε κάποιο decimal. Μπορείς π.χ. να προσθέσεις ένα ακόμα decimal column στο datatable για κάθε τέτοιο text πεδίο και να το γεμίσεις με τα αποτελέσματα της Decimal.Parse στην οποία θα περάσεις το locale του web service
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos