Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλημέρα,

Φτιάχνω μια ρουτίνα που γεμίζει πίνακες στο 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 έκδοση...

Δημοσ.

https://stackoverflow.com/questions/11118678/convert-csv-data-to-datatable-in-vb-net

Δεν σου κάνει η insert. δες την πρώτη λύση στο παραπάνω.

 

Λύσεις που να κάνεις την διαδικασία χωρίς χρήση των υπαρχόντων wizard-made μεθοδων παντα θα υπάρχουν ...σε αυτό δεν τίθεται θέμα....το ζήτημα είναι αν μπορείς να "φυτέψεις" τις παραμέτρους...

Δημοσ.

Πώς θα τις φυτέψεις με το 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 colCount
tbl
.Columns.Add(New DataColumn("Column_" & i, GetType(Int32)))
Next

 

'Τώρα έχεις το αρχείο με τα πεδία, στη μνήμη χωρίς στοιχεία.

' θα μπορούσε το csv να μην είχε τίτλους στηλών, και τότε θα έπρεπε να φτιάξεις διάλογο που ζητάει προκαταβολικά τον αριθμό πεδίων αλλά πάλι θα έφτιαχνες τα ονόματα στηλών.

 

'Εδώ το πάει με διάβασμα γραμμή τη γραμμή, αλλά δημιουργία νέου DataRow, το λέει newRow. Το νέο έργεται από το tbl.Rows.Add(), γιατί στην ουσία σου δίνει δείκτη στο νέο που ήδη βρίσκεται στο πίνακα tbl (αρχείο στην μνήμη)
For Each line In lines
Dim objFields = From field In line.Split(","c)
Select CType(Int32.Parse(field), Object)
Dim newRow = tbl.Rows.Add()

 

' εδώ με μια εντολή βάζει όλα τα πεδία στο ItemArray
newRow.ItemArray = objFields.ToArray()
Next

 

Ουσιαστικά το ItemArray "φορτώνει" από πίνακα. Κάτι που θα ήθελες για τον TableAdapter, αλλά αυτό  μόνο για το update θα σε βοηθήσει!

Εδώ το έχει ξεκάθαρα.

https://msdn.microsoft.com/en-us/library/ms233812.aspx

Οπότε το χρειάζεσαι το TableAdapter, αλλά όχι για να δίνει απευθείας σε αυτό γραμμές (αφού θέλεις ο κώδικας να παίζει για κάθε αριθμό πεδίων).

Δημοσ.

Αυτή την διαδικασία την ξέρω...το θέμα είναι ότι δεν είναι δικό μου το project ...τεσπα ...θα το κάνω στατικά τώρα γιατί έτσι και αλλιώς για μια περίπτωση είναι απλώς έψαχνα για πιο δυναμική συμπεριφορά..

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...