DOBON.NETプログラミング道掲示板

No34116 の記事


■34116 / )  Re[1]: 数字だけで構成されてるCSVフィールドが自動的に数値として解釈される
□投稿者/ 魔界の仮面弁士 大御所(1193回)-(2019/02/05(Tue) 12:14:24)
  • アイコン2019/02/05(Tue) 12:16:25 編集(投稿者)

    No34114に返信(Iraquserさんの記事)
    > > //接続文字列
    > > string conString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
    > > + csvDir + ";Extended Properties=\"text;HDR=No;FMT=Delimited\"";

    データ中に「改行」「"」「,」などの特殊文字を含むような CSV で無いのなら、
    File.ReadAllLines を Split するような LINQ 式で処理した方が手っ取り早いかも。



    もし、Jet/ACE を使って取り込む方法を採用するのであれば、
    取りうる選択肢としては下記の 3 通り。


    案1)CSV 取込前に schema.ini を動的に配置する。
     schema.ini では、全列に対してテキスト形式(CharまたはLongChar)を
     割り当てておくこと。


    案2)HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Text
     のレジストリキーを開き、MaxScanRows 値を DWORD 0x0 に変更するか、
     ImportMixedTypes 値を文字列 "Text" にしてから実行する。
    ※システム全体に影響を与えます。


    案3)HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0
     の下にあるレジストリの内容を、自身のアプリ専用エントリー
     (例:HKEY_LOCAL_MACHINE\SOFTWARE\MyGroup\MyApp\1.0\)
     に配置し、そこの MaxScanRows / ImportMixedTypes を指定しておいた上で
     接続文字列に対して
      ";Jet OLEDB:Registry Path=SOFTWARE\MyGroup\MyApp\1.0;"
     を追加しておく。
    ※自身のアプリケーションのみに影響を与えます。


    なお 64bit OS をお使いの場合は、案2/案3のレジストリキーが
    SOFTWARE ではなく SOFTWARE\Wow6432Node 配下のエントリーとなります。
違反を報告
返信 削除キー/


Mode/  Pass/


- Child Tree -