【问题标题】:bulk upload text file using Microsoft.Jet.OLEDB使用 Microsoft.Jet.OLEDB 批量上传文本文件
【发布时间】:2014-02-11 11:25:27
【问题描述】:

我有以下代码,我尝试了网上提到的所有内容,但无法从文本文件中读取数据。

string path=@"D:\New folder\abc.txt"
string pathOnly = Path.GetDirectoryName(path);
string fileName = Path.GetFileName(path);

string excelConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly + @";Extended Properties=""text;HDR=YES;FMT=TabDelimited""";
OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);

excelConnection.Open();
OleDbCommand cmd = excelConnection.CreateCommand();
cmd.CommandText = String.Format("SELECT * FROM [{0}]", fileName);  
OleDbDataReader dReader;
dReader = cmd.ExecuteReader();

DateTime UploadedDate = DateTime.Now;
DataTable sourceData = new DataTable();
sourceData.Load(dReader);
DataColumn col = new DataColumn("UploadedDateCol", typeof(DateTime));
col.DefaultValue = UploadedDate;
sourceData.Columns.Add(col);
int x = sourceData.Rows.Count;

这个 x 值总是 0。我的电脑是 64 位电脑。 或者是否有任何其他库可以用于批量上传。

我的 .txt 文件如下:这些值由 tabpipeline(|)

分隔
0421230424  3391542691  5295963551  2755344586  12345678

【问题讨论】:

    标签: c# sql .net bulkinsert


    【解决方案1】:

    就制表符分隔的文件而言,您应该始终查看FileHelper library

    别再造轮子了,这个库已经很成熟了。

    FileHelpers 是一个免费且易于使用的 .NET 库,用于 从文件中的固定长度或分隔记录导入/导出数据, 字符串或流。

    这个想法很简单:

    您可以简单地强输入您的平面文件(固定或分隔) 描述一个映射到每条记录的类,然后读/写你的 文件作为强类型的 .NET 数组

    图书馆还支持从不同的地方导入/导出数据 Excel、Access、SqlServer 等存储。

    【讨论】:

      【解决方案2】:

      为了克服这个问题,在Schema.ini 文件中定义了详细信息。如果文件名是 abc.txt 则需要在同一位置创建 abc.ini 文件。

       string iniFileMsg = "[" + newfileName + ".txt]";
       StreamWriter sw = new StreamWriter(newFilePath + "/schema.ini", false);
       sw.WriteLine(iniFileMsg);
       sw.WriteLine("Format=Delimited(|)");
       sw.WriteLine("ColNameHeader=True");
       sw.Flush();
      

      如果你有不同的couns,则需要添加如下:

       List<string> columns = excelobj.GetCSVColumnNames(excelUploadedFullPath);
                      //  sw.WriteLine("Col1=Phone Text Width 10");
      for (int i = 0; i < columns.Count; i++)
      {
         sw.WriteLine("Col" + (i + 1) + "=" + columns[i].Replace(" ", "_") + " Text Width 100");
      }
      sw.Flush();
      sw.Close();
      

      从 GetCSVColumnNames() 我得到了列名。之后我按上述方法上传数据

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-19
        • 2018-03-17
        • 2020-09-30
        • 2011-07-03
        • 1970-01-01
        相关资源
        最近更新 更多