masteripper Δημοσ. 15 Ιουνίου 2017 Δημοσ. 15 Ιουνίου 2017 Καλημέρα, Φτιάχνω μια ρουτίνα που γεμίζει πίνακες στο Dataset μου απο .csv αρχεία. Βασικώς χρησιμοποιώ το TableAdapter.Insert η οποία ουσιαστικά παραπέμπει σε μέθοδο που έχει φτιάξει ήδη ο wizard. Ετσι όπως είναι δομημένη η μέθοδος αναγκαστικά θα πρέπει να την χρησιμοποιώ ως εξής Table.Insert(param1,param2....paramn) όπου τα param θα είναι μεταβλητές που θα έχω ορίσει ήδη εγώ ή elements απο καποιο array τα οποία θα πρέπει να τα εχω ορίσει εγω με το χέρι στατικά ...π.χ. arr(0),arr(1)....arr(n) ΤΟ θέμα είναι ότι αφού γεμίζει απο .csv ουσιαστικά κάθε param είναι το delimited τμήμα της γραμμής που διαβάζεται...οπότε σκέφτομαι ότι θα ήταν καλύτερο αν μπορούσε να γεμίσει κάπως έτσι For each s in lineDelimitedArray() TableAdapter.Insert(???) Next Αν η μέθοδος είχε σαν όρισμα paramarray δεν θα είχαμε θέμα αλλά έτσι όπως είναι δεν βλέπω κάποιο τροπο να "κτίσω" τα ορίσματα.... Νομίζω ότι γίνεται μέσω reflection αλλά θα προτιμούσα μια πιο Light έκδοση...
solarpower Δημοσ. 15 Ιουνίου 2017 Δημοσ. 15 Ιουνίου 2017 https://stackoverflow.com/questions/11118678/convert-csv-data-to-datatable-in-vb-net Δεν σου κάνει η insert. δες την πρώτη λύση στο παραπάνω.
masteripper Δημοσ. 15 Ιουνίου 2017 Μέλος Δημοσ. 15 Ιουνίου 2017 https://stackoverflow.com/questions/11118678/convert-csv-data-to-datatable-in-vb-net Δεν σου κάνει η insert. δες την πρώτη λύση στο παραπάνω. Λύσεις που να κάνεις την διαδικασία χωρίς χρήση των υπαρχόντων wizard-made μεθοδων παντα θα υπάρχουν ...σε αυτό δεν τίθεται θέμα....το ζήτημα είναι αν μπορείς να "φυτέψεις" τις παραμέτρους...
solarpower Δημοσ. 16 Ιουνίου 2017 Δημοσ. 16 Ιουνίου 2017 Πώς θα τις φυτέψεις με το Insert, υποτίθεται ότι αυτό είναι για γνωστό σύνολοι πεδίων. ' φορτώνεις τις γραμμές Dim lines = IO.File.ReadAllLines(path) φτιάχνεις τον πίνακα που δεν ξέρεις ακόμα πόσα πεδία θα πάρειDim tbl = New DataTable ' Παίρνεις την πρώτη γραμμή και τη χωρίζεις ανά κόμμα (αν και το Excel βγάζει με Tab και είναι πιο σωστό γιατί μπορεί να παίζει το κόμμα ως χαρακτήρας για την υποδιαστολή των δεκαδικών. Dim colCount = lines.First.Split(","c).Length For i As Int32 = 1 To colCounttbl.Columns.Add(New DataColumn("Column_" & i, GetType(Int32)))Next 'Τώρα έχεις το αρχείο με τα πεδία, στη μνήμη χωρίς στοιχεία. ' θα μπορούσε το csv να μην είχε τίτλους στηλών, και τότε θα έπρεπε να φτιάξεις διάλογο που ζητάει προκαταβολικά τον αριθμό πεδίων αλλά πάλι θα έφτιαχνες τα ονόματα στηλών. 'Εδώ το πάει με διάβασμα γραμμή τη γραμμή, αλλά δημιουργία νέου DataRow, το λέει newRow. Το νέο έργεται από το tbl.Rows.Add(), γιατί στην ουσία σου δίνει δείκτη στο νέο που ήδη βρίσκεται στο πίνακα tbl (αρχείο στην μνήμη)For Each line In linesDim objFields = From field In line.Split(","c)Select CType(Int32.Parse(field), Object)Dim newRow = tbl.Rows.Add() ' εδώ με μια εντολή βάζει όλα τα πεδία στο ItemArraynewRow.ItemArray = objFields.ToArray()Next Ουσιαστικά το ItemArray "φορτώνει" από πίνακα. Κάτι που θα ήθελες για τον TableAdapter, αλλά αυτό μόνο για το update θα σε βοηθήσει! Εδώ το έχει ξεκάθαρα. https://msdn.microsoft.com/en-us/library/ms233812.aspx Οπότε το χρειάζεσαι το TableAdapter, αλλά όχι για να δίνει απευθείας σε αυτό γραμμές (αφού θέλεις ο κώδικας να παίζει για κάθε αριθμό πεδίων).
masteripper Δημοσ. 16 Ιουνίου 2017 Μέλος Δημοσ. 16 Ιουνίου 2017 Αυτή την διαδικασία την ξέρω...το θέμα είναι ότι δεν είναι δικό μου το project ...τεσπα ...θα το κάνω στατικά τώρα γιατί έτσι και αλλιώς για μια περίπτωση είναι απλώς έψαχνα για πιο δυναμική συμπεριφορά..
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα