Private Function CreateConnString(ByVal Str As String) As String
Return "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Str & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"""
End Function
...
For Each sMatl_Num As String In alMaterialNumbers
ifileNo = 1
dbConnection.ConnectionString = CreateConnString(sExcelDBPath)
dbCommand.Connection = dbConnection
dbCommand.CommandText = "SELECT [col1], [col2], [col3], [col4], [col5], [col6] FROM [sheet$] WHERE [material]='" & sMatl_Num & "'" & " AND [col3] IS NOT NULL" & " AND [col6] IS NOT NULL"
dbConnection.Open()
dbReader = dbCommand.ExecuteReader()
If dbReader.HasRows Then
Do While dbReader.Read
sCol1= dbReader.GetString(0).ToString
sCol2= dbReader.GetString(1).ToString
sCol3= dbReader.GetString(2).ToString
sCol4= dbReader.GetString(3).ToString
sCol5= dbReader.GetString(4).ToString
sCol6= dbReader.GetString(5).ToString
'Write txt file with name and content derived from these strings
Loop
End If
dbReader.Close()
dbConnection.Close()
Next
我正在使用oledb查询Excel文件。有很多列可以从每行获取数据。这种情况非常缓慢。有没有办法可以优化这个?数组列表的计数大约是23k。
答案 0 :(得分:1)
尝试仅打开连接一次,然后处理它作为记录集返回的行,然后关闭它。
因此,您可以更改SQL以按sMatl_Num对行进行排序,并使用where子句仅选择alMaterialNumbers中的MaterialNumbers(这可能是IN子句或子查询 - 它取决于可能有多少个值)< / p>
所以有了一个记录集,你可以遍历它写出每个MaterialNumbers的行,当数字改变写出到下一个文件...
这是否有意义。