现在要实现一个动态导入Excel的功能,就是字段个数和名字都没定,在数据库里面存着,自己配置。
现在功能已经基本实现,有下面几个问题,望大家指点。
1.读Excel的时候,如果列头有小数点(例如0.2),那么读到DataTable中小数点会变成#(0#2).这样就和我字段配置表中的字段对应不上了,数据也就导不到库里。2.   在导数据的过程中会验证这条数据是不是和数据库中重复(有关键字段作为验证条件,关键字段也是不定的)。如果重复,就用这次导的数据更新数据库里的数据。    
    我现在的实现方法是把数据库里的数据取到DataTable中和本次导入的数据对比 重复的就赋值更新。  
    现在的问题是这样循环挨个字段赋值的方法太慢了,6000重复数据大概要3分钟左右。有没有更快的方法。3.  还是刚才的步骤,我把更新完的DataTable想保存到数据库中,我得每行数据都拼接Update语句,耗时大概30秒左右。之前用过SqlDataAdapter的批量Update方法。但是 问题是我的数据表没有主键。使用这个方法会报错。
有么有别的方法批量保存DataTable到数据库中吗??(表没有主键)。说的有点啰嗦,先谢谢大家了!

解决方案 »

  1.   

    (1)在excel中设置这一列的数据格式
    (2)对不重复的那一列做索引和唯一约束
    (3)没有主键只能这么插入了。你最好定义一个主键(不一定是你的现有的列)
      

  2.   

    回  1). 数据源不定,而且不能改动列头,我想知道为什么会把小数点读成#。
        2). 主要是给DataTable赋值过程慢,而且每列都有可能重复。
        3). 数据目标数据库是人家订的,不能加主键。
      

  3.   

    1.在excel里设置单元格格式为文本或者是"0"那种格式
    2.这个暂时没想到,看能否利用表复杂的sql语句实现,因为操作excel文件的sheet也可以想操作数据库表一样,是支持sql语句的。
    3.很负责人的说,没有主键也可以用update,表示我这么做的时候没报错
      

  4.   

    是批量,就是用的SqlDataAdapter.Update(table)
      

  5.   

    1.读Excel的时候,如果列头有小数点(例如0.2),那么读到DataTable中小数点会变成#(0#2).这样就和我字段配置表中的字段对应不上了,数据也就导不到库里。
    ————
    答:要求上传.csv文件,这样就全变成string了,不存在小数点问题
    ——
    2.   在导数据的过程中会验证这条数据是不是和数据库中重复(有关键字段作为验证条件,关键字段也是不定的)。如果重复,就用这次导的数据更新数据库里的数据。    
        我现在的实现方法是把数据库里的数据取到DataTable中和本次导入的数据对比 重复的就赋值更新。  
        现在的问题是这样循环挨个字段赋值的方法太慢了,6000重复数据大概要3分钟左右。有没有更快的方法。
    ————
    答:一定要循环查 重复可以把你的循环分页
    或者:updata xxx(select × form xxx where in(id,id,id))
    插入就写成not in——
    3.  还是刚才的步骤,我把更新完的DataTable想保存到数据库中,我得每行数据都拼接Update语句,耗时大概30秒左右。之前用过SqlDataAdapter的批量Update方法。但是 问题是我的数据表没有主键。使用这个方法会报错。
    有么有别的方法批量保存DataTable到数据库中吗??(表没有主键)。
    ——————
    答:吧所有的数据统一到一个表里面,
    然后用sql操作
    ————
    ps;你的30秒是你计算的吗?如果是你就换个机器吧!586太差了
      

  6.   

    有代码吗   我怎么写都是主键问题
    你上你的代码,把那个批量更新的方法贴出来就行,别贴你的其他业务流程我说的是我的数据库中 表没有主键      而不是DataTable没有取主键     真的是不行批量操作的。