C#数据库数据导入导出系列之一 ASP.NET Excel导入Sql Server数据库

C#数据库数据导入导出系列之一 ASP.NET Excel导入Sql Server数据库

在日常的项目中,Excel,Word,txt等格式的数据导入到数据库中是很常见的,我在这里做一下总结

这里将分为Asp.net导入Sql Server,Oracle数据库和WinForm导入Sql Server,Oracle数据库。

C#数据库数据导入导出系列之一 ASP.NET Excel导入Sql Server数据库

C#数据库数据导入导出系列之二 数据库导出到Excel上

C#数据库数据导入导出系列之三 数据库导出到Excel下

C#数据库数据导入导出系列之四 WinForm数据库导入导出到Excel

注意 这里四篇文章只是基础的方法,若有更高的要求,可以参考

http://www.cnblogs.com/atao/archive/2009/11/15/1603528.html

http://www.cnblogs.com/tonyqus/category/182110.html 

http://www.yongfa365.com/Item/NPOI-MyXls-DataTable-To-Excel-From-Excel.html .net 通过NPOI或MyXls把DataTable导出到Excel

 

先看界面图

实现的基本思想:

1,先使用FileUpload控件fuload将Excel文件上传到服务器上得某一个文件夹。

2,使用OleDb将已经上传到服务器上的Excel文件读出来,这里将Excel文件当做一个数据库来读。在联系数据库语句中,Data Source就是该文件在服务器上得物理路径

3,将第二步中读出的数据以DataTable对象返回。

4,遍历DataTable对象,然后到Sql Server数据库中查询,是否存在该条数据。如果存在,可以做更新,或者不做处理;如果不存在,则插入数据。

注意:在遍历DataTable的时候,可是使用dt.Rows[i]["Name"].ToString();Name为Name列的表头,所以Excel中列的顺序就无关紧要了。当然,前提是你知道Excel里列中各表头的名字。如果Excel中列的顺序固定,即可按下面代码中的方式进行。

添加的引用:

[csharp]  view plain copy
  1. using System;  
  2. using System.Data;  
  3. using System.Data.OleDb;  
  4. using System.Data.SqlClient;  
  5. using System.IO;  
  6. using System.Text;  
  7. using System.Web;  
  8. using System.Web.UI;  

 

代码:

[csharp]  view plain copy
  1. private DataTable  xsldata()  
  2.         {  
  3.            if(fuload.FileName == "")  
  4.             {  
  5.                 lbmsg.Text = "请选择文件";  
  6.                 return null;  
  7.             }  
  8.             string fileExtenSion;  
  9.             fileExtenSion = Path.GetExtension(fuload.FileName);  
  10.             if(fileExtenSion.ToLower() != ".xls" && fileExtenSion.ToLower() != ".xlsx")  
  11.             {  
  12.                 lbmsg.Text = "上传的文件格式不正确";  
  13.                 return null;  
  14.             }  
  15.             try  
  16.             {  
  17.                 string FileName = "App_Data/" + Path.GetFileName(fuload.FileName);  
  18.                 if(File.Exists(Server.MapPath(FileName)))  
  19.                 {  
  20.                     File.Delete(Server.MapPath(FileName));  
  21.                 }  
  22.                 fuload.SaveAs(Server.MapPath(FileName));  
  23.                 //HDR=Yes,这代表第一行是标题,不做为数据使用 ,如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES  
  24.                 string connstr2003 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(FileName) + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";  
  25.                 string connstr2007 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath(FileName) + ";Extended Properties=\"Excel 12.0;HDR=YES\"";  
  26.                 OleDbConnection conn;  
  27.                 if(fileExtenSion.ToLower() == ".xls")  
  28.                 {  
  29.                     conn = new OleDbConnection(connstr2003);  
  30.                 }  
  31.                 else  
  32.                 {  
  33.                     conn = new OleDbConnection(connstr2007);  
  34.                 }  
  35.                 conn.Open();  
  36.                 string sql = "select * from [Sheet1$]";  
  37.                 OleDbCommand cmd = new OleDbCommand(sql, conn);  
  38.                 DataTable dt = new DataTable();  
  39.                 OleDbDataReader sdr = cmd.ExecuteReader();  
  40.   
  41.                 dt.Load(sdr);  
  42.                 sdr.Close();  
  43.                 conn.Close();  
  44.                 //删除服务器里上传的文件  
  45.                 if(File.Exists(Server.MapPath(FileName)))  
  46.                 {  
  47.                     File.Delete(Server.MapPath(FileName));  
  48.                 }  
  49.                 return dt;  
  50.             }  
  51.             catch(Exception e)  
  52.             {  
  53.                 return null;  
  54.             }  
  55.         }  
  56.   
  57.         protected void Btn_Export_Excel_To_DB_Click(object sender, EventArgs e)  
  58.         {  
  59.             try{  
  60.   
  61.                 DataTable dt = xsldata();  
  62.   
  63.                 //dataGridView2.DataSource = ds.Tables[0];  
  64.                 int errorcount = 0;//记录错误信息条数  
  65.                 int insertcount = 0;//记录插入成功条数  
  66.   
  67.                 int updatecount = 0;//记录更新信息条数  
  68.   
  69.                 string strcon = "server=localhost;database=database1;uid=sa;pwd=sa";  
  70.                 SqlConnection conn = new SqlConnection(strcon);//链接数据库  
  71.                 conn.Open();  
  72.   
  73.                 for(int i = 0; i < dt.Rows.Count; i++)  
  74.                 {  
  75.                     string Name = dt.Rows[i][0].ToString();//dt.Rows[i]["Name"].ToString(); "Name"即为Excel中Name列的表头  
  76.                     string Sex = dt.Rows[i][1].ToString();  
  77.                     int Age = Convert.ToInt32(dt.Rows[i][2].ToString());  
  78.                     string Address = dt.Rows[i][3].ToString();  
  79.                     if(Name != "" && Sex != "" && Age != 0 && Address != "")  
  80.                     {  
  81.                         SqlCommand selectcmd = new SqlCommand("select count(*) from users where Name='" + Name + "' and Sex='" + Sex + "' and Age='" + Age + "' and Address=" + Address, conn);  
  82.                         int count = Convert.ToInt32(selectcmd.ExecuteScalar());  
  83.                         if(count > 0)  
  84.                         {  
  85.                             updatecount++;  
  86.                         }  
  87.                         else  
  88.                         {  
  89.                             SqlCommand insertcmd = new SqlCommand("insert into users(Name,Sex,Age,Address) values('" + Name + "','" + Sex + "'," + Age + ",'" + Address + "')", conn);  
  90.                             insertcmd.ExecuteNonQuery();  
  91.                             insertcount++;  
  92.                         }  
  93.                     }  
  94.                     else  
  95.                     {  
  96.                         errorcount++;  
  97.                     }  
  98.                 }  
  99.                 Response.Write((insertcount + "条数据导入成功!" + updatecount + "条数据重复!" + errorcount + "条数据部分信息为空没有导入!"));  
  100.             }  
  101.             catch(Exception ex)  
  102.             {  
  103.   
  104.             }  
  105.         }  

就介绍到这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值