zoukankan      html  css  js  c++  java
  • C#数据库数据导入导出系列之一 ASP.NET Excel导入Sql Server数据库 .

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

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

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

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

    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中列的顺序固定,即可按下面代码中的方式进行。

    添加的引用:

    1 01.using System;  
    2 02.using System.Data;  
    3 03.using System.Data.OleDb;  
    4 04.using System.Data.SqlClient;  
    5 05.using System.IO;  
    6 06.using System.Text;  
    7 07.using System.Web;  
    8 08.using System.Web.UI;  
    View Code
      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         }
  • 相关阅读:
    C++——STL内存清除
    c++——智能指针学习(unique_ptr)
    linux下将tomcat加入服务
    linux下oracle远程连接的问题
    oracle计算容量的方式
    oracle删除表的方式
    阻塞与非阻塞的区别
    java中queue的使用
    yum源
    VMware Tools 安装
  • 原文地址:https://www.cnblogs.com/cpcpc/p/2767916.html
Copyright © 2011-2022 走看看