C# 使用OleDbConnection读取制表符分隔的文件

C# 使用OleDbConnection读取制表符分隔的文件,c#,.net,oledb,text-files,C#,.net,Oledb,Text Files,我的制表符分隔文件如下所示: ISO ISO3 ISO-Numeric AD AND 20 我一直在尝试下面的代码,但没有成功 OleDbConnection cn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= |DataDirectory|;Extended Properties='text;HDR=Yes;FMT=TabDelimited'"); OleDbCommand cmd = n

我的制表符分隔文件如下所示:

ISO ISO3    ISO-Numeric
AD  AND 20
我一直在尝试下面的代码,但没有成功

OleDbConnection cn = new  OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= |DataDirectory|;Extended Properties='text;HDR=Yes;FMT=TabDelimited'");
OleDbCommand cmd = new OleDbCommand(@"SELECT * FROM countryInfo.txt", cn);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);

cn.Open();

DataTable dt = new DataTable();
da.Fill(dt);
这是数据集可视化工具的屏幕截图。这显然不是我想要的结果。

有什么建议吗?这是我的Schema.ini文件。它与文本文件位于同一目录中

[countryInfo.txt]
Format=TabDelimited
ColNameHeader=True
CharacterSet=ANSI
我应该用类似的东西来代替吗


@汉斯·帕桑这是一张截图。
一个明显的候选者是,这个空白实际上不是标签,而是空格。尝试使用FMT=Delimited()。使用十六进制查看器查看真正的内容。背景资料


并说明了为什么使用像Jet这样在过去9年中不受支持的代码块是一个错误。回答后,将schema.ini中的第一行留空。

创建schema.ini文件并将其保存到包含以下文本的应用程序文件夹中:

------------------Schema.ini file starts here-----------------
[Data.txt]
ColNameHeader=True
Format=TabDelimited
Col1=First_Name Text
Col2=Middle_Initial Text
Col3=Last_Name Text
------------------Schema.ini file ends here-----------------
然后使用以下代码加载Data.txt文件:

string fileName = string.Format("{0}", AppDomain.CurrentDomain.BaseDirectory);   
string connectionString = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}; " + "Extended Properties=\"text;HDR=YES;FMT=TabDelimited;\"", fileName);
string sql = "select * from " + "Data.txt";

OleDbConnection con = new OleDbConnection(connectionString);
con.Open();

OleDbDataAdapter dap = new OleDbDataAdapter(sql, con);
DataTable dt = new DataTable();
dt.TableName = "Data";
dap.Fill(dt);

con.Close();

我总是自己解析文件。几年前我就用过这些,所以我很生疏。但我确实记得schema.ini必须与数据文件位于同一目录中。另外,在前栏有一个#标志“可能”是个问题,但我不确定。它可能会解释要注释掉的列标题行。Schema.ini位于同一文件夹中。我还尝试删除#符号,但似乎没有帮助。FMT=Delimited()不起作用。当我在十六进制编辑器中打开文件时,我在字段之间看到“.”。这到底是什么意思?你应该看到十六进制数字,而不是点。发布屏幕截图。不知道“bh”可能是什么意思,这就是要求屏幕截图的目的。09确实是选项卡的ascii代码。是的,它是09。上面的截图,不知道。检查此线程: