2015-01-21 83 views
2

下面的Microsoft Jet OLEDB 4.0的连接字符串是.txt文件我的连接字符串和一些代码段为.txt文件格式

public class FileTransfers 
{ 

    public void fileFromDrive(string filename) 
    { 
     FileInfo file = new FileInfo(filename); 
     string fileConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + 
       file.DirectoryName + 
       "; Extended Properties='text;HDR=YES;FMT=Delimited(,)';"; 

     using (OleDbConnection con = new OleDbConnection(fileConnectionString)) 
     { 
      using (OleDbCommand cmd = new OleDbCommand(
       string.Format("SELECT * FROM [{0}]", file.Name), con)) 
      { 
       con.Open(); 



       using (OleDbDataAdapter adp = new OleDbDataAdapter(cmd)) 
       { 
        DataTable tbl = new DataTable("Attendance"); 
        adp.Fill(tbl); 
       } 
      } 
     } 
    } 
} 

但问题是,当我在tbl调试记录它让我看到数据只有一列,但在我的.txt文件中有七个多列和几百行。

我已经试过FMT=Delimited(,), FMT=TabDelimited,FMT=FiXed但并未得到多个列。我知道每一个条目都需要一个(,),但我不能手动完成。

+0

得到了答案: 第1步:问题右击解决方案 - >属性 - >目标Plateform到(x86)。第2步:将名为SCHEMA.INI在数据记录文件存在同一文件夹中的文件,现在打开SCHEMA.INI和写入文件[YourFileName]下一行写格式= TabDelimited – Samad 2015-01-22 06:35:42

+0

是我解决了这两个步骤,有表有单独的专栏感觉好:) – Samad 2015-01-22 06:43:01

+0

我已经引用您的解决方案,为将来的使用作为一个问题与一些细节。很高兴你解决了你的问题。 – Mehrad 2015-01-22 06:53:55

回答

1

有一些细节你需要考虑这样做的过程贾恩·施罗伊德在他的文章中提到Using OleDb to Import Text Files

Jet引擎使得对文件的内容的假设。此 可能会导致不正确的导入。例如,它可能认为列 包含日期值。但实际上,您的文件应该将字段 作为字符串处理。在这些情况下,您应该创建一个Schema.Ini文件, 描述了每列的值类型。该类在打开分隔文件之前创建了一个 Schema.Ini文件,但只有 指定了分隔符。您可能需要将其更改为使用 预定义的INI文件来描述您的输入文件。

因此,请按照规定创建schema.ini文件,您的问题将全部消失。它的内容应该这样看,

[FileName.csv] 
ColNameHeader=True 
Format=CSVDelimited 

更多细节条款怎么样请参阅下面的MSDN指导,

Schema.ini File (Text File Driver)