使用MS Jet OLEDB导入.csv的问题

时间:2013-05-06 08:15:49

标签: c# .net sql-server oledb

我正在为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;
    }

1 个答案:

答案 0 :(得分:0)

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

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