спасибо за ваши ответы, ребята.
хотя кажется, что самый простой способ - это вручную.поэтому я сам начал писать код.и я опубликую его здесь, если кто-то может заинтересоваться им
, он может не охватывать все, но он довольно гибкий.здесь, так что если вы читаете это и не можете понять что-то, я буду рад развить: -)
Sub ImportFile(ByVal FilePath As String, ByVal RecordType As ObjectType, Optional ByVal HasHeaders As Boolean = True, Optional ByVal RowDelimiter As String = ControlChars.Tab, Optional ByVal CellDelimiter As String = ControlChars.NewLine)
Dim objReader = New StreamReader(FilePath)
Dim strContents = objReader.ReadToEnd
objReader.Close()
Dim Columns = New List(Of String)
Dim axName = ObjectType.Account.GetType.Assembly.FullName
Dim objRecord = Activator.CreateInstance(axName, RecordType.ToString).Unwrap
Dim dcx = DBContext()
dcx.EditLogging = False
Dim tbl = dcx.GetTable(objRecord.GetType)
Dim TableColumns = New List(Of String)
For Each p In objRecord.GetType.GetProperties
If (p.PropertyType.BaseType IsNot Nothing AndAlso p.PropertyType.BaseType.Name = "ValueType") Or p.PropertyType Is "".GetType Then TableColumns.Add(p.Name)
Next
Dim Rows = Split(strContents, RowDelimiter).ToList
If HasHeaders Then
Columns = Rows(0).Split(CellDelimiter).ToList
Rows.RemoveAt(0)
'check validity
For Each clm In Columns
If Not TableColumns.Contains(clm) Then Throw New ApplicationException(clm & " is not a valid column name.")
Next
Else
Columns = TableColumns
End If
For Each row In Rows
objRecord = Activator.CreateInstance(axName, RecordType.ToString).Unwrap
Dim Cells = row.Split(CellDelimiter)
For i = 0 To Cells.Count - 1
SetObjProperty(objRecord, Columns(i), Cells(i))
Next
tbl.InsertOnSubmit(objRecord)
Next
dcx.SubmitChanges()
End Sub