岁长,忆衰,点滴存于此!!

Txt文件转成Access Table

       txt文件存有28万条记录,欲将其导入Access数据库中,却又规定不能使用Access DTS工具。一开始想一条一条的导入到数据库表中,然而最后实现下来发现耗时太多,一个文件导下来需要10分钟左右,实在受不了。这时就想有没有办法可以批量的将记录写到表中,在网上收了很多方法,都不行,最后收一个老兄ADO代码的启示,终于解决。不过还是不完美,这个方法需要增加一个配置文件。然而目前还没找到更好的方法,只好先记录下来,期待后面更好的方法。
      txt文件用“~”作为分格符。
      其中增加的配置文件名为Schema.ini。txt文件名命名为A.txt。
      Schema.ini如下:

 1[A.txt]
 2ColNameHeader=false
 3Format=Delimited(~)
 4MaxScanRows=0
 5CharacterSet=ANSI
 6Col1="FirtCol" Text Width 2
 7Col2="SecondCol" Char Width 20
 8Col3="ThreeCol"  Char Width 20
 9Col4="FourCol" Double
10Col5="FiveCol" Double
11Col6="SixCol" Double
12Col7="SevenCol" Double
13Col8="EightCol" Double
14Col9="NineCol" Double

      C#代码如下:
      
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Collections;
using System.Data.OleDb;
using System.Data;
using DTS;


namespace TransTxtToAccess
{
    
class TextToAccess
    
{
        
public void Trans()
        
{
            
string DBFilePath = string.Empty;
            
string txtFilePath = string.Empty;
            DBFilePath 
=@"D:\XSLT\Test.mdb";
            
string TableName = "tmp3";
            
string TextFileName = "A.txt";
            
string txtExistFolder = "D:\\XSLT";
            
try
            
{
                OleDbConnection CurrentProject 
= new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + DBFilePath);
                CurrentProject.Open();
                Console.WriteLine(
"Open");

                OleDbCommand AccessCommand 
= new OleDbCommand("Select * into"+" "+TableName+ " from [Text;database="+txtExistFolder+"]."+TextFileName, CurrentProject);
                
                AccessCommand.ExecuteNonQuery();
               
                
 
            }

            
catch (FileLoadException e)
            
{
                Console.WriteLine(e.Message);
            }

        }

    }

}

posted on 2008-06-24 23:59  居不易  阅读(923)  评论(0)    收藏  举报