现在要实现一个动态导入Excel的功能,就是字段个数和名字都没定,在数据库里面存着,自己配置。
现在功能已经基本实现,有下面几个问题,望大家指点。
1.读Excel的时候,如果列头有小数点(例如0.2),那么读到DataTable中小数点会变成#(0#2).这样就和我字段配置表中的字段对应不上了,数据也就导不到库里。2. 在导数据的过程中会验证这条数据是不是和数据库中重复(有关键字段作为验证条件,关键字段也是不定的)。如果重复,就用这次导的数据更新数据库里的数据。
我现在的实现方法是把数据库里的数据取到DataTable中和本次导入的数据对比 重复的就赋值更新。
现在的问题是这样循环挨个字段赋值的方法太慢了,6000重复数据大概要3分钟左右。有没有更快的方法。3. 还是刚才的步骤,我把更新完的DataTable想保存到数据库中,我得每行数据都拼接Update语句,耗时大概30秒左右。之前用过SqlDataAdapter的批量Update方法。但是 问题是我的数据表没有主键。使用这个方法会报错。
有么有别的方法批量保存DataTable到数据库中吗??(表没有主键)。说的有点啰嗦,先谢谢大家了!
现在功能已经基本实现,有下面几个问题,望大家指点。
1.读Excel的时候,如果列头有小数点(例如0.2),那么读到DataTable中小数点会变成#(0#2).这样就和我字段配置表中的字段对应不上了,数据也就导不到库里。2. 在导数据的过程中会验证这条数据是不是和数据库中重复(有关键字段作为验证条件,关键字段也是不定的)。如果重复,就用这次导的数据更新数据库里的数据。
我现在的实现方法是把数据库里的数据取到DataTable中和本次导入的数据对比 重复的就赋值更新。
现在的问题是这样循环挨个字段赋值的方法太慢了,6000重复数据大概要3分钟左右。有没有更快的方法。3. 还是刚才的步骤,我把更新完的DataTable想保存到数据库中,我得每行数据都拼接Update语句,耗时大概30秒左右。之前用过SqlDataAdapter的批量Update方法。但是 问题是我的数据表没有主键。使用这个方法会报错。
有么有别的方法批量保存DataTable到数据库中吗??(表没有主键)。说的有点啰嗦,先谢谢大家了!
(2)对不重复的那一列做索引和唯一约束
(3)没有主键只能这么插入了。你最好定义一个主键(不一定是你的现有的列)
2). 主要是给DataTable赋值过程慢,而且每列都有可能重复。
3). 数据目标数据库是人家订的,不能加主键。
2.这个暂时没想到,看能否利用表复杂的sql语句实现,因为操作excel文件的sheet也可以想操作数据库表一样,是支持sql语句的。
3.很负责人的说,没有主键也可以用update,表示我这么做的时候没报错
————
答:要求上传.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太差了
你上你的代码,把那个批量更新的方法贴出来就行,别贴你的其他业务流程我说的是我的数据库中 表没有主键 而不是DataTable没有取主键 真的是不行批量操作的。