2

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

最後の行で、ファイル名が大きい場合、次のエラーが発生します

は有効な名前ではありません。無効な文字や句読点が含まれていないこと、および長すぎないことを確認してください。

私の質問-ファイル名または選択クエリに制限はありますか、または従う必要のあるパターンがありますか?

4

4 に答える 4

3

これに苦労したばかりですが、ファイルパスまたは名前のどの部分にもスペースや一重引用符を含めることができないか、ファイルパスが無効であると判断されることがわかりました。これは、私が試した名前の資格やエスケープに関係なく適用されました。

すべてのスペースと一重引用符を削除した後、すべてが正常でした。例えば。

無効:

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

有効:

C:\Users\Administrator\Documents\Data\Users-Folder\ImportData.csv
于 2016-04-10T08:40:37.327 に答える
1

これがAviから恥知らずに盗まれた答えです。それがコミュニティウィキである理由です。

Oledbを使用するのではなく、.Netに組み込まれている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

私はすでに借りた答えに賛成しました

于 2010-01-04T12:28:51.280 に答える
1

いくつかの実験では、拡張子のないファイル名に「。」を含めることはできません。したがって、MyData.csvは有効なファイル名ですが、そうではMy.Data.csvありません。

于 2012-05-04T10:55:51.643 に答える
0

問題が何であるかを正確に把握していませんでしたが、長いファイル名が問題を引き起こしていることは明らかなので、これが私がしたことです

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に変更しました。

これは私が望んでいたことではありません。私はまだより良い解決策を探しています。誰かが見つけたら投稿してください。

ありがとう

于 2010-01-06T16:12:22.607 に答える