当前位置: 首页 > news >正文

.NET导入Excel数据

      有些时候我们需要批量添加数据,如果我们直接使用添加功能添加会很繁琐,而且如果数据没了,还要这样添加,这样显然是不好的,所以我们可以先把数据记录在excel中,直接导入即可,还可以重用,不用一个一个添加,这样可以解决不少的时间,现在我们来看看如何在.net中导入excel数据!

     大致的步骤是这样的:

     首先,我们要在excel中添加好数据,保存好

     其次,excel文件导入到项目中的指定文件夹下,然后读取excel中的数据到内存中(DataTable)

     最后,从dataTable中取出这些数据添加到指定的数据库表里即可

   下面来看一个具体的例子:

   

ExpandedBlockStart.gif View Code
  //查询excel的方式
   public  DataSet ExecleDs( string  filenameurl,  string  table)
    {

        DataSet ds 
=   new  DataSet();

              string strConn = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + filenameurl + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1;'";

        OleDbConnection conn 
=   new  OleDbConnection(strConn);

        conn.Open(); 
        
        
string  tableName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,  null ).Rows[ 0 ][ 2 ].ToString().Trim();

        OleDbDataAdapter odda 
=   new  OleDbDataAdapter( " select * from [ " + tableName + " ] " ,conn);

        odda.Fill(ds, table);

        
return  ds;

    }

   //讲excel添加到项目中,并读取数据到数据库表中
    
protected   void  ImageButton1_Click( object  sender, ImageClickEventArgs e)
    {

        
if  (banji.SelectedValue  ==   " 0 " )
        { 
        Response.Write(
" <script>alert('请选择班级!')</script> " );    // 当Excel表为空时,对用户进行提示
         return ;
        }
       
        
int  ccid  =  Convert.ToInt32(banji.SelectedValue);
        
        
if  (FileUpload1.HasFile  ==   false ) // HasFile用来检查FileUpload是否有指定文件
        {
            Response.Write(
" <script>alert('请您选择Excel文件')</script>  " );
            
return ; // 当无文件时,返回
        }
        
string  IsXls  =  System.IO.Path.GetExtension(FileUpload1.FileName).ToString().ToLower(); // System.IO.Path.GetExtension获得文件的扩展名
         if  (IsXls  !=   " .xls " )
        {
            Response.Write(
" <script>alert('只可以选择Excel文件')</script> " );
            
return ; // 当选择的不是Excel文件时,返回
        }
      
            
string  filename  =  FileUpload1.FileName;               // 获取Execle文件名  DateTime日期函数
             string  savePath  =  Server.MapPath(( " ~\\CourseFile\\ " +  filename); // Server.MapPath 获得虚拟服务器相对路径
            FileUpload1.SaveAs(savePath);                         // SaveAs 将上传的文件内容保存在服务器上
            DataSet ds  =   new  DataSet();
            
try
            {
                 ds 
=  ExecleDs(savePath, filename);
            }
            
catch  
            {
                Response.Write(
" <script>alert('导入失败,Excel工作表标签名错误,标签名必须是Sheet1,请查证后再导入!')</script> " );
                
return ;
            }

            
// DataRow dr = ds.Tables[0].Rows;             // 定义一个DataRow数组
             int  rowsnum  =  ds.Tables[ 0 ].Rows.Count;
           
            
if  (rowsnum  == 0 )
            {
                Response.Write(
" <script>alert('Excel表为空表,无数据!')</script> " );    // 当Excel表为空时,对用户进行提示
                 return ;
            }
            
else
            {
                
for  ( int  i  =   0 ; i  <  rowsnum; i ++ )
                {

                    M_CZUser mu 
=   new  M_CZUser();
                    B_CZUser bu 
=   new  B_CZUser();
                     
try
                    {
                        mu.userid 
=  ds.Tables[ 0 ].Rows[i][ " 帐号 " ].ToString();
                        mu.pwd 
=  ds.Tables[ 0 ].Rows[i][ " 密码 " ].ToString();
                        mu.uname 
=  ds.Tables[ 0 ].Rows[i][ " 姓名 " ].ToString();
                        mu.num 
=  ds.Tables[ 0 ].Rows[i][ " 学号 " ].ToString(); // 日期 excel列名【名称不能变,否则就会出错】
                        mu.sex  =  ds.Tables[ 0 ].Rows[i][ " 性别 " ].ToString();
                    mu.utype 
=   4 ;
                    mu.class_id 
=  ccid;
                    mu.birthday 
=  DateTime.Parse(ds.Tables[ 0 ].Rows[i][ " 出生日期 " ].ToString());
                    mu.Lastlogintime 
=  DateTime.Now;
                    mu.idcard 
=  ds.Tables[ 0 ].Rows[i][ " 身份证号码 " ].ToString();
                    DataSet ds2 
=  bu.GetList( " * " " userid=' "   +  ds.Tables[ 0 ].Rows[i][ " 帐号 " ].ToString()  +   " ' " );
                    
if  (ds2.Tables[ 0 ].Rows.Count  >   0 )
                    {
                        Function.showmessage(
this .Page,  " 帐号 "   +  ds.Tables[ 0 ].Rows[i][ " 帐号 " ].ToString()  +   " 已存在,操作终止。 " "" "" );
                        
return ;
                    }
                    DataSet ds3 
=  bu.GetList( " * " " num=' "   +  ds.Tables[ 0 ].Rows[i][ " 学号 " ].ToString()  +   " ' " );
                    
if  (ds3.Tables[ 0 ].Rows.Count  >   0 )
                    {
                        Function.showmessage(
this .Page,  " 学号 "   +  ds.Tables[ 0 ].Rows[i][ " 学号 " ].ToString()  +   " 已存在。 " "" "" );
                        
return ;
                    }
                        bu.Add(mu);
                    }
                    
catch  (Exception ex)        // 捕捉异常
                    {
                        Response.Write(
" <script>alert('导入内容: "   +  ex.Message  +   " ')</script> " );
                        
return ;
                    }

                }
                Response.Write(
" <script>alert('Excle表导入成功!')</script> " );
            }
  

    }

 

Excel其实也是一种数据库,既然是数据库,就可以用一般的操作数据库的方法来做处理。
         /// <summary>
        /// 包含表头的连接
        /// </summary>
        private  const string EXCELCONNECTIN = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=YES;IMEX=1;';";
        /// <summary>
        /// 不包含表头的连接
        /// </summary>
        private  const string EXCELCONNECTINNOHDR = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=NO;IMEX=1;';";

 

一般的情况下,还是使用包含表头的连接,否则会出现,导入到数据库的时候,有些字段的值是空的

相关文章:

  • suse linux10主机添加默认路由
  • 如何在Ubuntu下安装”.deb“、”.bin“、”.tar.gz“、”.tar.bz2“格式的软件包!...
  • 关于日志采集的争论
  • 2014-07-14 Java Web的学习(11)-----数据库分页事务简单理解
  • 学习札记
  • 文件系统管理
  • poj2538
  • Web开发的那点事--业务层常用功能
  • WPF注意点
  • AS400 Sequel View报表学习笔记 (一)
  • 2013年工作中遇到的20个问题:141-160
  • What means the error-message 'java.lang.OutOfMemoryError: GC overhead limit exceeded' in Java?
  • 大家好
  • getBoundingClientRect() 来获取页面元素的位置
  • 索引(二)
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【Leetcode】104. 二叉树的最大深度
  • CentOS7简单部署NFS
  • css的样式优先级
  • iOS 系统授权开发
  • Material Design
  • node学习系列之简单文件上传
  • Selenium实战教程系列(二)---元素定位
  • 番外篇1:在Windows环境下安装JDK
  • 浮动相关
  • 近期前端发展计划
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 排序算法学习笔记
  • 我有几个粽子,和一个故事
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (pojstep1.1.2)2654(直叙式模拟)
  • (pojstep1.3.1)1017(构造法模拟)
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)Google的Objective-C编码规范
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • . Flume面试题
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET MVC之AOP
  • .NET 设计模式初探
  • .net 生成二级域名
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET简谈设计模式之(单件模式)
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • @Conditional注解详解
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • []C/C++读取串口接收到的数据程序
  • [1181]linux两台服务器之间传输文件和文件夹