6

次のコードを使用して csv ファイルを読み込もうとしています。ファイルには列ヘッダーもあります。

以下は、ファイルをデータセットにロードした後の出力です。 データセットにデータをロードした後の出力

public DataSet LoadCVS(string filePath)
{
    DataSet ds = new DataSet();
    string fileName = System.IO.Path.GetFileName(filePath);
    try
    {
        string path = @System.IO.Path.GetDirectoryName(filePath);

        using (OleDbConnection conn =
            new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + @";Extended Properties=""Text;HDR=Yes;FMT=Delimited"""))
        {
            using (OleDbCommand cmd =
                new OleDbCommand("SELECT * FROM [" + fileName + "]", conn))
            {
                conn.Open();
                OleDbDataAdapter da = new OleDbDataAdapter(cmd);

                da.Fill(ds, "csv");
            }
        }
    }
    catch (Exception ex) //Error
    {
        MessageBox.Show(ex.Message);
    }
    return ds;
}

csv ファイルのサンプル データ:

Org,Item Number,Item Description,Lot Number,Lot Expiration Date,Marketing Division,Product Type
F01,Jan-00,LFIT MORSE TAPER HEAD,MHD7D8,3-May-14,5,5
F01,Jan-05,LFIT MORSE TAPER HEAD,MHATY9,1-Mar-14,5,5
F01,Jan-00,LFIT MORSE TAPER HEAD,MHDEN1,8-Mar-14,5,5
F01,Jan-05,LFIT MORSE TAPER HEAD,MHNY4L,18-Nov-14,5,5
F01,Jan-10,LFIT MORSE TAPER HEAD,MHHLYR,31-May-14,5,5
F01,Jan-00,LFIT MORSE TAPER HEAD,MJNKRK,10-Oct-15,5,5
F01,Jan-00,LFIT MORSE TAPER HEAD,MKNN38,14-Nov-16,5,5
F01,Jan-05,LFIT MORSE TAPER HEAD,MJDV6X,8-Apr-15,5,5
F01,Jan-05,LFIT MORSE TAPER HEAD,MKAK94,22-Feb-16,5,5

問題:

  • 最初の列のデータは F01 から 1 に変換されます。
  • Access 12.0 ドライバーも試しました。
4

1 に答える 1

6

あなたが見ているのは、OLEDBドライバーがあなたに有利に働き、列のデータ型を推測しようとしていることです。あなたの場合、最初の列にすべての「F01」が表示され、その列の数値に数値データを保持する数値が表示されます。

CSV と同じフォルダーに schema.ini という名前のテキスト ファイルを作成することで、CSV 列のデータ型を指定できます。このファイルでは、データ ファイルの各列について、列の名前と列のデータ型を指定します。データの例を次に示します。

[NameOfYourCSVDataFile.csv]
Col1=Org Text
Col2="Item Number" Text
Col3="Item Description" Text
Col4="Lot Number"  Text
Col5="Lot Expiration Date" Text
Col6="Marketing Division" Text
Col7="Product Type" Text

schema.ini ファイルで定義できるプロパティは他にもあります。詳細については、こちらを参照してください。

手動で schema.ini を作成できない、または作成したくない場合は、CSV を読み取る前にプログラムでファイルを作成できます。

できるだけ回避できるのであれば、OLEDB を使用して CSV を読み取らないことを強くお勧めします。非常に有能な CSV リーダーが多数あります。質問で提供したサンプル データが実際のデータとまったく同じである場合は、これらのいずれかが OLEDB よりも使いやすいことがわかると思います。あなたの質問で、つらい思い出がよみがえりました。

于 2013-03-29T07:07:25.470 に答える