我使用oledb驱动程序
从csv / txt文件中检索数据ConnString = "Provider=Microsoft.Jet.OleDb.4.0; Data Source = " & System.IO.Path.GetDirectoryName(strFileName) & "; Extended Properties = ""Text;HDR=YES;FMT=Delimited"""
strQuery = "SELECT * FROM [" & System.IO.Path.GetFileName(strFileName) & "]"
在最后一行,如果文件名很大,我会收到以下错误
不是有效名称。确保它不包含无效字符或标点符号,并且不会太长。
我的问题 - 文件名或选择查询是否有限制,或者我需要遵循一些模式?
答案 0 :(得分:2)
刚刚解决这个问题,我发现文件路径或名称的无部分可能包含空格或单引号,或者文件路径将被确定为无效。这适用于我尝试的名称的任何资格或逃避。
删除所有空格和单引号后,一切都很好。例如
<强>无效:强>
"C:\Users\Administrator\Documents\Data\User''s Folder\Import Data.csv"
<强>有效:强>
C:\Users\Administrator\Documents\Data\Users-Folder\ImportData.csv
答案 1 :(得分:1)
这是一个answer stolen shamelessly from Avi,这就是为什么它是社区wiki:
我建议查看内置于.Net的TextFieldParserClass而不是使用Oledb。你需要包括
Imports Microsoft.VisualBasic.FileIO.TextFieldParser
以下是一个快速示例:
Dim afile As FileIO.TextFieldParser = New _
FileIO.TextFieldParser(FileName)
Dim CurrentRecord As String() ' this array will hold each line of data '
afile.TextFieldType = FileIO.FieldType.Delimited
afile.Delimiters = New String() {","}
afile.HasFieldsEnclosedInQuotes = True
' parse the actual file '
Do While Not afile.EndOfData
Try
CurrentRecord = afile.ReadFields
Catch ex As FileIO.MalformedLineException
Stop
End Try
Loop
答案 2 :(得分:1)
一些实验表明,没有扩展名的文件名不得包含“。”。因此,MyData.csv
是有效的文件名,但My.Data.csv
不是。
答案 3 :(得分:0)
我没有确切地知道问题是什么,但很明显长文件名正在创建问题所以这里是what I did
ConnString = "Provider=Microsoft.Jet.OleDb.4.0; Data Source = " & System.IO.Path.GetDirectoryName(strFileName) & "; Extended Properties = ""Text;HDR=YES;FMT=Delimited"""
'=================================== OleDB Supports fixed length file name. Handle long file names'
Dim OldFileName As String = System.IO.Path.GetFileName(strFileName)
Dim NewFileName As String = Guid.NewGuid().ToString().Substring(0, 10) + System.IO.Path.GetExtension(OldFileName)
Dim rootPath As String = System.IO.Path.GetDirectoryName(strFileName) + "/"
'Rename file name'
My.Computer.FileSystem.RenameFile(rootPath + OldFileName, NewFileName)
strFileName = rootPath + NewFileName
'===================================='
Dim strQuery As String
strQuery = "SELECT * FROM [" & System.IO.Path.GetFileName(strFileName) & "]"
'Revert rename file name'
'===================================================================='
My.Computer.FileSystem.RenameFile(rootPath + NewFileName, OldFileName)
strFileName = rootPath + OldFileName
'===================================================================='
我在将数据重命名为原始文件名后检索数据时,使用新的Guid重命名了该文件。
这不是我想要的,我仍然在寻找更好的解决方案。如果有人找到,请发帖。
由于