【问题标题】:Issue with importing .csv using MS Jet OLEDB使用 MS Jet OLEDB 导入 .csv 的问题
【发布时间】:2013-05-06 08:15:49
【问题描述】:

我正在为 ASP .NET 应用程序将 CSV 文件导入 SQL。我可以导入 .csv,但是如果其中包含除数字以外的任何内容,则一列包含空值。

此行导入正常:

1109,003,IN,0093219095,3/17/2013,3/21/2013,,Sobeys Warehouse,4819.13,61.37,4880.50,RV,1109-003

SQL中第四列为NULL:

1109,999,IN,REF 44308/S. DRA,3/18/2013,3/21/2013,,"EC Rebates W/E -02 14, 2013",-200.02,0.00,-200.02,SA,1109-999

所有其他包含文本的列都可以正常导入,只有第四列是个问题。我无法弄清楚受影响的列与其他列可能有什么不同。如果我用它导入的数字替换文本,那么它与文本数据有关。 SQL 字段是 nvarchar(50),所以它不是数据类型问题。

我的连接字符串(dir 包含文件夹的路径):

string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"" + dir + "\\\";Extended Properties='text;HDR=Yes;FMT=Delimited(,)';";

导入代码:

    public DataTable GetCSV(string path)
    {
        if (!File.Exists(path))
        {
            return null;
        }

        DataTable dt = new DataTable();
        string fullPath = Path.GetFullPath(path);
        string file = Path.GetFileName(fullPath);
        string dir = Path.GetDirectoryName(fullPath);
        string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"" + dir + "\\\";Extended Properties='text;HDR=Yes;FMT=Delimited(,)';";
        string query = "SELECT * FROM " + file;
        System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(query, connString);

        try
        {
            da.Fill(dt);
        }
        catch (InvalidOperationException)
        {
        }

        da.Dispose();

        return dt;
    }

【问题讨论】:

  • 你能看到OleDbDataAdapter中的数据吗?另外你不应该吞下InvalidOperationException
  • 文件中的哪一行是问题所在? Jet 提供程序guesses the correct data types 通过读取文件的前 8 行(默认情况下),因此如果第 9 行是字符串,那么您可能会看到这个问题。虽然我不确定你为什么使用这种方法而不是BULK INSERT or OPENROWSET
  • 我将它加载到数据表中,这样我就可以扫描行以消除无效记录。它是从 Excel 保存的 CSV,因此有数千条记录为空。清理干净后,我将其批量插入。问题行是几百个,所以你的建议是有道理的。有没有办法强制数据类型?
  • 一旦我搞定了逻辑并知道什么地方会出错,我就会对 InvalidException 做一些事情。在这一点上,我只想让它正常工作。
  • 您是否阅读了我链接的文档?请参阅标题为“缺失值”的部分,它解释了如何使用 IMEX=1

标签: c# .net sql-server oledb


【解决方案1】:

这解决了我的问题。感谢 Pondlife 让我指出了正确的方向。我认为它与数据类型有关,只是不确定它在哪里受到冲击。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms709353%28v=vs.85%29.aspx

【讨论】:

  • 仅供参考,仅链接答案是not considered ideal SO,因为链接中断并且没有上下文。编辑您的答案以简要说明您所做的事情会很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-18
  • 1970-01-01
  • 2011-02-06
  • 2012-11-12
  • 1970-01-01
相关资源
最近更新 更多