当前位置: 首页 > 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() 来获取页面元素的位置
  • 索引(二)
  • 77. Combinations
  • CSS盒模型深入
  • JS函数式编程 数组部分风格 ES6版
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • mysql 5.6 原生Online DDL解析
  • REST架构的思考
  • Xmanager 远程桌面 CentOS 7
  • 阿里研究院入选中国企业智库系统影响力榜
  • 技术发展面试
  • 前端代码风格自动化系列(二)之Commitlint
  • 深入浅出webpack学习(1)--核心概念
  • 正则表达式-基础知识Review
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​力扣解法汇总946-验证栈序列
  • # include “ “ 和 # include < >两者的区别
  • #QT(一种朴素的计算器实现方法)
  • #WEB前端(HTML属性)
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (Python第六天)文件处理
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (转)使用VMware vSphere标准交换机设置网络连接
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET NPOI导出Excel详解
  • .net 后台导出excel ,word
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .NET中winform传递参数至Url并获得返回值或文件
  • @EnableAsync和@Async开始异步任务支持
  • []常用AT命令解释()
  • [4.9福建四校联考]
  • [Angular] 笔记 18:Angular Router
  • [BZOJ1178][Apio2009]CONVENTION会议中心
  • [C# WPF] 如何给控件添加边框(Border)?
  • [C++] cout、wcout无法正常输出中文字符问题的深入调查(1):各种编译器测试
  • [CISCN2019 华东北赛区]Web2
  • [elastic 8.x]java客户端连接elasticsearch与操作索引与文档
  • [HJ56 完全数计算]
  • [HUBUCTF 2022 新生赛]
  • [ios-必看] IOS调试技巧:当程序崩溃的时候怎么办 iphone IOS