none
TextFieldParserを使用したCSVインポートについて RRS feed

  • 質問

  • windowsXP

    VB2005

     

    お世話になっております。

    現在下記コードにてCSVインポートをおこなっているのですが、最終的に最終行近くのcsvRecordsに格納したフィールドを既存のデータテーブルに入れたいと思っております。ご覧のとおりcsvRecordsにフィールドを格納するところまでは問題ありません。

    ここからデータテーブルに出力させる方法をご教授頂けないでしょうか?

     

       Sub インポート_CSV()
            Dim csvPath As String
            Dim fbd As New FolderBrowserDialog
            fbd.Description = "フォルダを指定してください。"
            fbd.RootFolder = Environment.SpecialFolder.Desktop
            fbd.SelectedPath = "C:\"
            fbd.ShowNewFolderButton = True

            If fbd.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then
                Console.WriteLine(fbd.SelectedPath)
            End If

            csvPath = fbd.SelectedPath

            Dim csvRecords As New System.Collections.ArrayList()

     

            'CSVファイル名
            Dim csvFileName As String = csvPath & "\WaterQualityMain.csv"

            Dim tfp As New FileIO.TextFieldParser(csvFileName, _
                System.Text.Encoding.GetEncoding(932))
                   tfp.TextFieldType = FileIO.FieldType.Delimited        tfp.Delimiters = New String() {","}        tfp.HasFieldsEnclosedInQuotes = True
            tfp.TrimWhiteSpace = True

            While Not tfp.EndOfData
                'フィールドを読み込む
                Dim fields As String() = tfp.ReadFields()
              

                csvRecords.Add(fields)・・・・・・・・・・・・・・・・・・・・・・・・・・・・csvRecordsにフィールド全てを格納
            End While

     

            tfp.Close()


        End Sub

    2008年2月14日 23:27

すべての返信

  • Whileの中で、データテーブルをdtとすれば、

     

    Dim dr as DataRow = dt.NewRow()

    dr("カラム名") =  hoge

    dt.Rows.Add(dr)

     

    のような感じでデータテーブルに保存できます。

     

    それとも、ArrayListからDataTableへ出力させたいということなのでしょうか?

    2008年2月15日 0:41
    モデレータ
  • trapemiyaさん有り難うございます。いつもすみません^^

    trapemiyaさんの言われるとおりです。無事インポートさせることができました。

    が、、、ちょっと困ったことになりました。

    通常通り(インポートではなくバインドさせたデータグリッドビューで普通にデータを編集する等)ですと、これでテーブルアダプタのUPDATEにて保存可能なのですが、今回インポートさせたデータを保存しようとすると、長さ0の文字列データは保存できない旨の警告が出て保存に至りませんでした。もちろんデータベース上では、この該当フィールドは空白OK(値の要求なし)です。

    自分なりに考えたのですが、これってエクスポートしたデータ自体が空白(””)という認識で出力したがために、インポートする際空白文字列というような認識になってしまい起こることなのでしょうか?

    やはり、エクスポートの方法を考えないといけないのでしょうか?
    2008年2月15日 1:36
  • mdbでよろしいでしょうか? 「値の要求なし」ではなくて、「空文字列の許可」をしなければなりません。前者がnullの許容で、後者が長さ0の文字列の許容になります。

     

    #でも、バインドされたDataTable経由で保存できるとしたら別のところに原因がありそうです。

    2008年2月15日 4:39
    モデレータ
  • 初歩的なことのようですね・・・

    確かに空文字列を許可していませんでした。

    お手数掛けてすみません。うまく保存までに至りました。

    有り難うございます^^

    2008年2月15日 5:03