我正在尝试将文本文件加载到Access 2007表中。我知道你可以逐行读取文件,然后从每行创建一条记录。我试图看看是否可以通过INSERT INTO完成,而不是循环遍历所有文本行。我的文本文件不是字符分隔的,而是固定的列宽。例如:
Date Speed Weight CarID Fuel
1120 200 10000 T230 200
1112 215 11000 F3AE 160
示例中的数据具有可读性空间,但实际上数据如此聚集在一起
112020010000T230200
111221511000F3AE160
无论如何我正在尝试
Dim sImportFolder As String = "C:\MyData"
Dim sSource As String = "C:\data.accdb"
Dim sImportFile As String = "week.txt"
Dim AccessConn As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sSource & ";Persist Security Info=True;Jet OLEDB:Database Password=blah")
AccessConn.Open() 'open the connection to the database
Dim AccessCommand As New System.Data.OleDb.OleDbCommand("INSERT INTO [tblData] ([PtDate], [PtSpeed], [PtWt], [PtCar], [PtFuel]) SELECT F1, F2, F3, F4, F5 FROM [Text;DATABASE=" & sImportFolder & ";].[" & sImportFile & "]")
AccessCommand.Connection = AccessConn
AccessCommand.ExecuteNonQuery()
AccessConn.Close()
我无法弄清楚如何告诉命令数据的结构。我知道你可以使用一个模式文件,但必须有一种方法可以通过代码来完成这一任务。
AGP
答案 0 :(得分:0)
这里有一个类似的问题:
Read fixed width record from text file
基本上,答案是你可以在代码中做一些简单的事情来指定模式并让它为你分手。您需要做的是循环遍历每一行,使用SubString提取数据,然后在每行中插入一次Access(效率非常高),或者您可以在循环中构建DataTable然后插入Access数据库使用DataTable。要构建DataTable,您仍需要解析数据(使用SubString或RegEx)。