C#读取TXT文本,按条件读取数据并插入数据库。该如何处理

C#读取TXT文本,按条件读取数据并插入数据库。
****************************************************************************************************

执行开始: 2007-7-12 17:00:59
执行完成: 2007-7-12 17:01:09

****************************************************************************************************

执行开始: 2007-7-12 17:03:02
在目的的行号为 1975 处出错。到目前为止,在该任务中遇到错误数: 1。  

错误源: Microsoft OLE DB Provider for SQL Server
错误描述: 语句已终止。
错误帮助文件: 
错误帮助内容 ID: 0
  

错误源: Microsoft OLE DB Provider for SQL Server
错误描述: 违反了 PRIMARY KEY 约束 'PK_CASHFLOW'。不能在对象 'CASHFLOW' 中插入重复键。
错误帮助文件: 
错误帮助内容 ID: 0
  
执行完成: 2007-7-12 17:03:02

****************************************************************************************************




如上所示,TXT文档的内容是这样的,一直延续下去,*号之间有一个执行开始时间,一个执行完成时间,如果没有错误就只有执行时间和完成时间,如果有错误的话就有一些错误源,错误描述等,我想按这个时间读取错误描述后的内容,各位大侠有什么好的解决方法?方法好,加分。

------解决方案--------------------
那就用正则表达式比较方便
当然文件大的话正则表达式未必高,你可以写一个文件按行扫描,扫描的时候只读取开头为“错误”的行

------解决方案--------------------
流方式、ODBC、OLEDB都可以操作txt

如果你不想用正则过滤,就用OLEDB.

举个例子
C# code

  public static DataTable TxtToDataTable(string path)
        {
            DataTable dt = new DataTable();
            string constr = string.Empty;
            FileInfo fi = new FileInfo(path);
            if (fi.Extension.ToLower().CompareTo(".txt") == 0)
            {
                constr = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=TEXT;Data Source=" + fi.DirectoryName;
                string SQLString = "   Select   *   From   " + fi.Name;


                using (OleDbConnection conn = new OleDbConnection(constr))
                {
                    conn.Open();
                    OleDbDataAdapter AdapterText = new OleDbDataAdapter(SQLString, conn);
                    AdapterText.Fill(dt);
                    return dt;
                }

            }
}

------解决方案--------------------
string FileRd=File.ReadAllText(@"C:\Documents and Settings\Administrator\桌面\TEST.txt" ,System.Text.Encoding.Default);
string[] Fsplit = FileRd.Split("执行开始:,执行完成:".Split(','), StringSplitOptions.RemoveEmptyEntries); 
int ArrayLength=(Fsplit.Length-1)/2;
string [] Str1=new string[ArrayLength];
string [] Str2=new string[ArrayLength];
string [] Str3=new string[ArrayLength];
int i=1;
while(i<ArrayLength+1)
{
int Ent = Fsplit[i].IndexOf("\r\n");
int Sat = Fsplit[i * 2].IndexOf("\r\n");
Str1[i - 1] = Fsplit[i*2-1].Substring(0, Ent).Trim();
Str2[i - 1] = Fsplit[i*2-1].Substring(Ent).Trim();
Str3[i - 1] = Fsplit[i * 2].Substring(0, Sat).Trim();
i++;
}