需要你的意見。目前正在VB.NET中開發一個應用程序。
我有一個包含超過一千行的文本文件。每行包含需要插入數據庫的數據。行的示例如下:
0001--------SCOMNET--------0.100---0.105
乍一看,有人可能會發現每個列都是用製表符分隔的,但實際上每個列都是用空格分隔的(我用' - '表示空格,因為某種程度上無法通過SO文本編輯器來顯示空格)。
第一列由。定義
Substring(0, 12) which is the data [0001--------]
第二欄
Substring(12, 12) in which the data is [SCOMNET-----]
第三欄是
Substring(24, 8) in which the data is [---0.100]
最後一欄是
Substring(32, 8) in which the data is [---0.105]
我的初始是提取文本文件的行並作為字符串列表存儲,然後在循環時,使用SubString()函數分隔列表中的每個字符串項並逐個插入,直到列表的末尾。但這無疑需要時間。
在我的場景中,我如何利用SqlBulkCopy?或者,如果有任何其他方法來實現更快的插入?說;
這包括一種方法,可能是一種更有效的方式來讀取您的文本文件。
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