Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Microsoft.Jet.OLEDB批量上载文本文件_C#_Sql_.net_Bulkinsert - Fatal编程技术网

C# 使用Microsoft.Jet.OLEDB批量上载文本文件

C# 使用Microsoft.Jet.OLEDB批量上载文本文件,c#,sql,.net,bulkinsert,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=" + pathO

我有下面的代码,我尝试了网上提到的所有东西,但无法从文本文件中读取数据

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位的。 或者有没有其他库,我可以使用批量上传

My.txt文件如下:这些值由选项卡管道(|)分隔


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

不要重新发明轮子,这个图书馆已经很成熟了

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

想法很简单:

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

该库还支持从不同数据库导入/导出数据 Excel、Access、SqlServer等存储


为了克服这个问题,在
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();
如果您有不同的coumn,则需要添加以下内容:

 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();
List columns=excelobj.GetCSVColumnNames(excelUploadedFullPath);
//sw.WriteLine(“Col1=手机文本宽度10”);
for(int i=0;i
从GetCSVColumnNames()中,我得到了列名。之后,我按照上述方法上传数据

 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();