首页 新闻 会员 周边

.net批量插入数据问题

1
悬赏园豆:30 [已解决问题] 解决于 2015-07-25 12:50

问题描述:List<Dictionary<TB_A, List<TB_B>>> listInStock, Dictionary< TB_B, List<TB_C>> dicStockCard。

简单描述:(1)要新增多条A记录,一条A记录对应多条B记录,一条B记录对应多条C记录。

(2)表TB_A、表TB_B和表TB_C的主键Id都是自增列。

(3)表TB_A新增后生成的一条记录的Id被表TB_B多条记录引用,表TB_B新增后生成的一条记录的Id被表TB_C引用。

若是循环一条条插入,插入完以后立马取出自增Id可以实现功能,但是效率太低。

若做成批量插入,苦思冥想未能实现,求各位支招...

kungge的主页 kungge | 初学一级 | 园豆:132
提问于:2015-04-05 17:49
< >
分享
最佳答案
1

使用存储过程,把新插入的id返回出来

收获园豆:30
刘宏玺 | 专家六级 |园豆:14020 | 2015-04-06 20:33
其他回答(8)
0

这个是没办法的。只能这样做。

如果你要提升效率,使用ORM,比如EF,你可以构建A实体,构建B并设置B的导航属性指向A,构建C并设置C的导航属性指向B,这样,你只要执行A的INSERT或UPDATE,则ORM会自动的、高效率的执行更新。

此外,要想达到你的需求又不使用ORM,则需要自己生成SQL或以某种格式把数据准备后通过存储过程来实现。

最后一个办法,就是生成多条SQL语句,组合成一个字符串执行。此时务必注意A的ID的获取。

519740105 | 园豆:5810 (大侠五级) | 2015-04-05 17:57
0

最好使用存储过程, 对这种多表操作的话。 

问天何必 | 园豆:3311 (老鸟四级) | 2015-04-06 08:53
0

1、使用自增ID就是有这个问题的,没人让你一定用自增ID的。

2、批量插入数据这种事又不会经常做,效率不效率的有啥用。

爱编程的大叔 | 园豆:30839 (高人七级) | 2015-04-06 10:07
0

在一个事务里插两次不行吗?

吴瑞祥 | 园豆:29449 (高人七级) | 2015-04-07 09:20
0

利用存储过程可以实现,注意获取新插入的自增Id。

晓菜鸟 | 园豆:2594 (老鸟四级) | 2015-04-07 16:21
0

先构建出datatable,这个应该很好弄,然后再用sqlbulkcopy批量插入,效率很高的

挨踢男.Orz | 园豆:387 (菜鸟二级) | 2015-04-24 18:01
0

方法一:可以预先 获得 要插入数据库后的ID 生成,但是会出现并发状况,所以要加锁。

方法二:使用存储过程操作

多罗贝勒 | 园豆:16 (初学一级) | 2015-05-25 09:17
0

这个项目的这个功能是通过批量执行sql实现的,sql中获取需要的自增的Id,谢谢各位

kungge | 园豆:132 (初学一级) | 2015-07-25 12:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册