使用Microsoft.Jet.OLEDB批量上传文本文件

时间:2014-02-11 11:25:28

标签: c# sql .net bulkinsert

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

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文件如下:这些值由标签管道(|)

分隔
0421230424  3391542691  5295963551  2755344586  12345678

2 个答案:

答案 0 :(得分:1)

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

不要重新发明轮子,这个库非常成熟。

  

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

     

这个想法非常简单:

     

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

     

图书馆还支持来自不同的导入/导出数据   存储,如Excel,Access,SqlServer等。

答案 1 :(得分:0)

为了克服这个问题,在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();

如果你有不同的coumns,那么需要添加如下:

 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()我得到了列名。之后我按上述方法上传数据