J'importe un fichier csv dans une datatable qui, malheureusement, met mes données dans des colonnes de chaîne même celles avec des chiffres.Convertir le type d'une colonne en datable
donc je dois convertir le format de certaines colonnes (à moins d'une autre manière) en datetime, entier ou double raison pour laquelle je l'ai écrit le code suivant:
Public Sub ChangeFieldType(ByRef dataTable As DataTable, ByVal fieldIndex As Integer, ByVal newType As Type)
Dim newDataTable As DataTable = dataTable.Clone
newDataTable.Columns(fieldIndex).DataType = newType
For Each row As DataRow In dataTable.Rows
newDataTable.ImportRow(row)
Next
dataTable = newDataTable
End Sub
Mais il y a des cellules vides qui le format de chaîne est vbnullstring. Ma question est est-il un moyen plus facile que mon code et sinon est-il un moyen plus rapide que la conversion des cellules vides alors de cette façon:
Public Sub ChangeFieldType(ByRef dataTable As DataTable, ByVal fieldIndex As Integer, ByVal newType As Type)
Dim newDataTable As DataTable = dataTable.Clone
newDataTable.Columns(fieldIndex).DataType = newType
For Each row As DataRow In dataTable.Rows
If row(fieldIndex) = vbNullString Then
row(fieldIndex) = Nothing
End If
newDataTable.ImportRow(row)
Next
dataTable = newDataTable
End Sub
Parce que cela est très très lent.
Merci
J'ai essayé votre solution mais j'obtiens une exception de cast lors de l'import du fichier csvfile dans le datatable. L'exception indique que le type attendu est Double au lieu de String. Mon code pour l'importation est la suivante: 'Bien que csvCopy.ReadNextRecord() Dim csvRow Comme DataRow = DataTable.NewRow Pour i = 0 à csvCopy.FieldCount - 1 csvRow (i) = csvCopy (i) Suivant datatable .Rows.Add (csvRow) Fin While' Et il se fige sur 'csvRow (i) = csvCopy (i)' – Rave
Vous le faites exactement faux comme l'op dans le lien. S'il vous plaît utiliser la méthode indiquée dans la réponse dans cette page – puneet
Merci cela a fonctionné parfaitement – Rave