2010-01-04 59 views
1

檢索從CSV/TXT文件中的數據我使用OLEDB驅動程序「不是一個有效的名稱」錯誤,而使用OLEDB

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) & "]" 

在最後一行我收到以下錯誤,如果從csv/txt文件檢索數據文件名很大

不是一個有效的名字。確保它不包含無效字符或標點符號,並且不會太長。

我的問題 - 是否有限制文件名或選擇查詢或有一些我需要遵循的模式?

+0

我沒有得到你想要說什麼。你能解釋一下 – Utkarsh 2010-01-04 11:51:34

+0

我明白了。謝謝 – Utkarsh 2010-01-04 12:38:09

回答

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將文件重命名,而我在將其重命名爲原始文件名後檢索數據。

這不完全是我想要的,我仍然在尋找更好的解決方案。如果有人找到一個,請發佈。

謝謝

+0

這種輕微的鏈接不再有效。我已將其刪除。 – Verbeia 2011-10-16 01:52:17

1

下面是一個answer stolen shamelessly from Avi這就是爲什麼它是社區維基:

我建議在尋找內置的.Net,而不是使用OLEDB的TextFieldParserClass。您需要包括

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 

我已經upvoted的answer I have borrowed

1

一些實驗表明,沒有擴展名的文件名不能包含「。」。因此,MyData.csv是有效的文件名,但My.Data.csv不是。

+0

我不記得文件名是否包含「。」或者不是因爲這個問題發生在前一段時間,但這可能是問題所在。 – Utkarsh 2012-05-09 07:38:06

1

在剛剛爲此付出努力之後,我發現沒有部分的文件路徑或名稱可能包含空格或單引號或文件路徑被確定爲無效。無論什麼資格或逃避我嘗試的名稱,這都適用。

我刪除所有空格和單引號後,一切都很好。例如。

無效:

"C:\Users\Administrator\Documents\Data\User''s Folder\Import Data.csv" 

有效期:

C:\Users\Administrator\Documents\Data\Users-Folder\ImportData.csv 
相關問題