Brauchen Ihre Meinungen. Derzeit entwickeln Sie eine Anwendung in VB.NET.
Ich habe eine Textdatei, die mehr als tausend Zeilen enthält. Jede Zeile enthält die Daten, die in die Datenbank eingefügt werden müssen. Ein Beispiel für eine Zeile lautet wie folgt:
0001--------SCOMNET--------0.100---0.105
Auf den ersten Blick könnte man meinen, dass jede Spalte mit einem Tab getrennt war, aber jede Spalte durch Leerstellen getrennt war (ich habe '-' als Leerzeichen verwendet, weil der SO-Texteditor die Leerzeichen nicht anzeigen konnte).
Die erste Spalte ist definiert durch
Substring(0, 12) which is the data [0001--------]
zweite Spalte
Substring(12, 12) in which the data is [SCOMNET-----]
dritte Spalte ist
Substring(24, 8) in which the data is [---0.100]
und letzte Spalte ist
Substring(32, 8) in which the data is [---0.105]
Meine Initiale ist jedoch, die Zeilen für die Textdatei zu extrahieren und in einer Liste von Strings zu speichern, dann während des Schleifens die einzelnen String-Elemente in der Liste mit der Funktion SubString () zu trennen und sie einzeln nacheinander einzufügen Ende der Liste. Aber das wird zweifellos Zeit brauchen.
Wie kann ich in meinem Szenario die SqlBulkCopy nutzen? Oder wenn es andere Möglichkeiten gibt, dies für einen schnelleren Einsatz zu erreichen? Sagen;
Dies beinhaltet eine Methode, mit der Sie Ihre Textdatei effizienter lesen können.
Sub readFixWidthTextFileIntoSqlTable()
Dim sqlConn As New SqlConnection("Connection String Goes Here")
sqlConn.Open()
Dim sqlComm As New SqlCommand
sqlComm.Connection = sqlConn
sqlComm.CommandType = CommandType.Text
sqlComm.CommandText = "INSERT INTO YourTableNameHere VALUES(@Field1, @Field2, @Field3, @Field4)"
sqlComm.Parameters.Add("@Field1", SqlDbType.Text)
sqlComm.Parameters.Add("@Field2", SqlDbType.Text)
sqlComm.Parameters.Add("@Field3", SqlDbType.Text)
sqlComm.Parameters.Add("@Field4", SqlDbType.Text)
Using IFReader As New FileIO.TextFieldParser(FileNameWithPath)
IFReader.TextFieldType = FileIO.FieldType.FixedWidth
IFReader.SetFieldWidths(12, 12, 8, 8)
While Not IFReader.EndOfData
Dim fields As String() = IFReader.ReadFields
sqlComm.Parameters("@Field1").Value = fields(0)
sqlComm.Parameters("@Field2").Value = fields(1)
sqlComm.Parameters("@Field3").Value = fields(2)
sqlComm.Parameters("@Field4").Value = fields(3)
sqlComm.ExecuteNonQuery()
End While
End Using
sqlConn.Close()
End Sub