导入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)
{
}