使用ms ace驱动程序读取csv文件时的数据omisson

时间:2013-12-05 05:45:43

标签: csv oledb

必须有一些解释。我的csv文件是这样的:

CustomerID,FirstName,LastName,EmpID,EmployeeName
1,John,Smith,2,Smith
2,Wilber,Wright,3,Shaney
3,Gloria,Johnathan,4,Dick

请注意,某些字段名称上包含ID。我执行下面的代码并尝试在调试期间使用DataTable可视化工具(在VS中)查看数据表。

using System;
using System.Data.OleDb;
using System.Data;

namespace caOledbFileOpen
{
    class Program
    {
        static void Main(string[] args)
        {
            OleDbConnection cxn = new OleDbConnection();
            cxn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\tools;Extended Properties='text;HDR=No;Delimiter(,)'";
            cxn.Open();
            OleDbCommand cmd = cxn.CreateCommand();
            cmd.CommandText = "Select * from [OUt.csv]";
            DataTable tbl = new DataTable();
            OleDbDataAdapter adp = new OleDbDataAdapter(cmd);
            adp.Fill(tbl);
            Console.WriteLine("End");
            Console.ReadLine();
        }
    }
}

我在细胞上观察它应显示CustomerIDEmpID它显示为空白。

2 个答案:

答案 0 :(得分:1)

问题是OLEDB文本驱动程序根据数据文件第一行中的数据推断出CSV“列”的数据类型。它会在数据的第一列和第四列中看到数字,并假设这些列是数字的,即使这些列的第一行中的数据不是数字。您所看到的是所有这些中非常烦人的部分:不会导入数据与这些列的数据类型不匹配的列。

此处的解决方案是使用CSV文本驱动程序文件指定列的数据类型。文本文件驱动程序文件是您在CSV所在的文件夹中创建的文本文件。该文件始终名为 schema.ini 。在文件中,您在第一行指定CSV文件名,以下行定义您的CSV。

像这样的 schema.ini 应该适合你:

[test.csv]  
ColNameHeader=False   
Col1="My Field 1" Text  
Col2="My Field 2" Text  
Col3="My Field 3" Text  
Col4="My Field 4" Text
Col5="My Field 5" Text

Herehere是指向使用 schema.ini 文件的更多信息的链接

答案 1 :(得分:0)

此外,在schema.ini文件中添加:

MaxScanRows=1

示例:

[hdrdtl.txt]
Format=TabDelimited
ColNameHeader=True  
MaxScanRows=1