c#
  • .net
  • oledb
  • text-files
  • 2010-10-31 47 views 5 likes 
    5

    我的制表符分隔的文件是这样的:使用的OleDbConnection阅读制表符分隔的文件

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

    下面是Dataset Visualizer的屏幕截图。它显然不是我以后的输出。 alt text

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

    [countryInfo.txt] 
    Format=TabDelimited 
    ColNameHeader=True 
    CharacterSet=ANSI 
    

    我应该只是使用类似FileHelpers而不是?


    @Hans Passant下面是截图。 alt text

    +0

    我总是解析该文件我自己。 – 2010-10-31 15:24:21

    +0

    几年前我和这些人一起工作过,所以我很生疏。但我记得schema.ini必须与数据文件位于同一个目录中。此外,前栏中有#号可能是个问题,但我不确定。它可能会将您的列标题行解释为注释掉。 – 2010-10-31 15:27:54

    +0

    Schema.ini位于相同的文件夹中。我也尝试删除#号,但似乎没有帮助。 – 2010-10-31 16:22:18

    回答

    1

    那么,一个明显的候选人是,这个白色空间实际上并不是一个选项卡,但空间。尝试FMT =分隔符()。使用十六进制查看器来查看真正存在的内容。 Backgrounder is here

    this thread显示了为什么使用像过去9年一直不被支持的诸如Jet这样的代码块的错误块是错误的。有了答案,将schema.ini中的第一行留空。

    +0

    FMT =分隔符()不起作用。当我在十六进制编辑器中打开文件时,我看到''。场之间。那个的真实意义是什么? – 2010-10-31 16:27:53

    +0

    你应该看到十六进制数字,而不是点。张贴屏幕截图。 – 2010-10-31 16:44:08

    +0

    不知道“bh”可能意味着什么,这是要求屏幕截图的要点。 09的确是一个标签的ascii代码。 – 2010-10-31 17:09:55

    2

    创建并保存一个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(); 
    
    相关问题