导入csv文件到数据库

思路:先把csv文件用fso读取出来,根据定的格式,分割成自己相要的内容,然后分别写入数据库中

eg:先对读取出来的数据做一个检查,符合条件的数据就作为一个整体,要么插入成功,要么插入失败,不符合条件的打印错误信息。

try
    {

     myConnection.Open();
     OleDbTransaction ts=myConnection.BeginTransaction();   //开始事务
     cmd.Transaction=ts;
     StreamReader f=new StreamReader(oFile.PostedFile.InputStream,System.Text.Encoding.Default);  //读取数据库的数据流
     while ((input=f.ReadLine())!=null)           //while循环
     {
      if (iLine==0) //第一行是标题,忽略
      {
       output=input+"\r\n";
       myOutput.Add(output);
       iLine++;
       continue;
      }
      //     TextBox1.Text+=input+"\r\n";
      if (input.Trim()=="") continue;
      asF=input.Split(",".ToCharArray());

      if (asF[0]!=null && asF[0]!="" && asF[0].Trim().Substring(0,1)=="*") //有取消标志的不作处理
      {
       output=input+"\r\n";
       myOutput.Add(output);
       continue;
      }
      else if (asF.Length<5) //列小于5就标上错误标志
      {
       iErrorCount++;
       output="*"+input+",本行数据不足5列!\r\n";
       myOutput.Add(output);
      }
      else if (!(IsDate(asF[1])&&IsNumber(asF[3])&&IsNumber(asF[4]))) //未通过数据格式检验
      {
       iErrorCount++;
       output="*"+input+",数字或日期不正确\r\n";
       myOutput.Add(output);
      }
      else //正常的数据
      {
       try
       {
        cmd.CommandText = "select orgasn from torga where orgaid='"+asF[2].Trim()+"'";
        object oSN=cmd.ExecuteScalar();
        if (oSN==null)
        {
         throw (new Exception("门店不存在"));
        }
        int iSN=int.Parse(oSN.ToString());

        cmd.CommandText=string.Format("insert into tshopsav (shopsn,SavDate,SavAmount,PointsAmount,flag,createdby,createdon,lastupdatedby,lastupdatedon)"+
         " values ({0} ,to_date('{1}','yyyy-mm-dd'),to_number('{2}'),to_number('{3}'),'0',{4},sysdate,{5},sysdate)",
         iSN,asF[1].Trim(),asF[3].Trim(),asF[4].Trim(),m_sUserSN,m_sUserSN);
        cmd.ExecuteNonQuery();
        output=input+"\r\n";
        myOutput.Add(output);
       }
       catch(Exception ex)
       {
        iErrorCount++;
        output="*"+input+","+ex.Message+"\r\n";
        myOutput.Add(output);
       }
      }
      iLine++;
     }

     if (iErrorCount==0)
     {
      ts.Commit();
      myConnection.Close();
      //     TextBox1.Text="数据导入成功!";
      this.RegisterStartupScript("javascript","<script language=javascript>window.opener.document.forms(0).submit();window.close();</script>");  //数据导入成功后,刷新父窗体。数据导入的结果直接体现在界面上
     }
     else
     {
      ts.Rollback();    //数据导入失败,直接回滚事务。
      myConnection.Close();

          Response.Clear();
      Response.ClearHeaders();
      Response.Buffer= true;
      Response.Charset="GB2312"; 
          Response.AppendHeader("Content-Disposition","attachment;filename=error.csv"); 
          Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
          Response.ContentType = "text/csv";//设置输出文件类型为text文件。

      this.EnableViewState = false;

      System.Collections.IEnumerator myEnumerator = myOutput.GetEnumerator();
      while ( myEnumerator.MoveNext() )
       Response.Write(myEnumerator.Current.ToString());
      Response.Flush();
      Response.End(); 
      Response.SuppressContent=true;

      return;
     }

    }
    catch(Exception ex)
    {
        }

posted on 2008-12-28 18:50  jameshappy  阅读(1095)  评论(0编辑  收藏  举报