首页新闻找找看学习计划

SqlBulkCopy 异常问题-当我往表 插入数据时,插入之后数据竟然多出一条数据???

0
悬赏园豆:20 [已解决问题] 解决于 2019-07-09 17:20

首先,我是通过SQL语句 查询 BranchTax 表的数据,把查询出来的数据装载到 DataTable中(dt_Tax),然后 通过循环 将它的的旧的外键BranchID的值 赋值 新的BranchID(赋值为64),然后再通过 SqlBulkCopy 插入数据库中去(就是执行以下截图的代码) ,奇怪的是, 通过DataTable dt_Tax = DbHelperSQL.Query("select * from TBranchTax where BranchID=" + old_BranchId.ToString()).Tables[0];查询出来的数据dt_BranchTax.Rows.Count=2,但是执行完上面的方法(SqlBulkCopy.WriteToServer())之后,在通过数据库 按新的BranchID为条件查询时,如select count(1) from BranchTax where BranchID=64 (64是新的ID)数据时 Branch表的数据 数量为 3个。究竟是为什么?求各位大神们 解答!!!

(注:其他表数据复制插入都能保证数据完整性,为什么只有部分表不能呢?)

以下是 SqlBulkCopy 执行代码:

 

这是插入之前数据:

这是插入之后的数据:

 

现在我将上面的SqlBulkCopy 执行代码去掉,用 普通 SQL语句执行添加语句(insert),调用ExecuteNonQuery方法执行,同样也是出现以上的问题!

默者的主页 默者 | 初学一级 | 园豆:183
提问于:2014-05-12 15:55
< >
分享
最佳答案
0

只能说检查代码,这种情况除了你代码的问题还真不好找别的原因。

收获园豆:20
幻天芒 | 高人七级 |园豆:36522 | 2014-05-12 21:29
其他回答(4)
0

是不是有外键约束

刘宏玺 | 园豆:14004 (专家六级) | 2014-05-12 16:29

有个外键和主键,我将外键的值改为 其他对应数据,然后再复制插入 数据库表中

支持(0) 反对(0) 默者 | 园豆:183 (初学一级) | 2014-05-12 16:38

@默者: 你把约束去掉了再试试

先看看是不是约束的问题

支持(0) 反对(0) 刘宏玺 | 园豆:14004 (专家六级) | 2014-05-12 16:40

@博客¥: 应该不可能是外键 影响的,因为我用 旧数据的ID 查询出来,然后将旧数据中 外键改为 对应其他的值,再插入数据库表中。 

支持(0) 反对(0) 默者 | 园豆:183 (初学一级) | 2014-05-12 16:44

@默者: 不试试怎么知道

支持(0) 反对(0) 刘宏玺 | 园豆:14004 (专家六级) | 2014-05-12 16:47

@博客¥: 去掉了,还是这样!

支持(0) 反对(0) 默者 | 园豆:183 (初学一级) | 2014-05-12 16:56
0

你能不能把问题描述的更详细点。比如从哪张表查询的出数据,又 Bulk Copy 到哪张表去? dt.Rows.Count 是几?插入到数据库中的三条数据同 dt 中的 2 或 3 条数据有啥关系?

Launcher | 园豆:45030 (高人七级) | 2014-05-12 17:33

我修改了一下 问题描述,你看一下是否能看懂!不清楚再告诉我,我再修改,谢谢!

支持(0) 反对(0) 默者 | 园豆:183 (初学一级) | 2014-05-12 17:45

@默者: 因为插入后你使用“from BranchTax where BranchID=45 ”查询,所以我要问一下,插入前,你是使用的“from BranchTax where BranchID <> 45 ” 查询到吗?

支持(0) 反对(0) Launcher | 园豆:45030 (高人七级) | 2014-05-12 17:55

@Launcher: 插入前,肯定是查询不到 包含有45的数据

支持(0) 反对(0) 默者 | 园豆:183 (初学一级) | 2014-05-12 17:58

@默者: 现在的问题是,插入前数量 和 插入后数量不一致!

支持(0) 反对(0) 默者 | 园豆:183 (初学一级) | 2014-05-12 18:03

@默者: 

从你给出的截图来看,你多了一条这样的数据:

145|64|0%营业税|0|0%营业税备注|2014-05-12 15:31:48:000|1

你在你的 dt 里找找有没有这条数据,记住是在 sqlTran.Commit() 之后检查 dt。

支持(0) 反对(0) Launcher | 园豆:45030 (高人七级) | 2014-05-13 09:02

@Launcher: 检查了,sqlTran.Commit() 之后,原数据还是不变,就是当你往数据库插入时,不知什么原因自动自增 一条数据 出来!

支持(0) 反对(0) 默者 | 园豆:183 (初学一级) | 2014-05-13 09:48

@默者:注意:145|64|0%营业税|0|0%营业税备注|2014-05-12 15:31:48:000|1 中的时间字段,此时间是否为你执行插入的时间?这个时间是否只出现在数据库而不会出现在你的 dt 中?

 

你可以从数据源中分别删除 49 和 50 这两条数据,测试哪条数据执行插入时会在数据库中新增一条重复记录。

 

你的数据库中是否有触发器之类的?

支持(0) 反对(0) Launcher | 园豆:45030 (高人七级) | 2014-05-13 10:15

@Launcher: 没错,这个时间确实没有出现在dt中,那个时间不知道它是怎么 添加上去的。

现在看上去是 49 这条数据 ,插入时会在数据库中新增一条重复记录。

我的数据库中没有触发器之类!!!

支持(0) 反对(0) 默者 | 园豆:183 (初学一级) | 2014-05-13 10:22

@默者: 现在我将SqlBulkCopy改为 普遍的 SQL语句进行 添加进数据库,都有这样的问题!求解释!!

支持(0) 反对(0) 默者 | 园豆:183 (初学一级) | 2014-05-13 11:12
0

你现在解决了吗?你有看过你代码里面查询出来写入之前的数据没?有没有多一行。我现在就遇到这这种情况,数据库里只有23条记录,代码里查出来每一条记录变成了三条重复的记录。搞得我完全不知道怎么回事。把查询语句直接放到sqlserver里执行,又是对的,没有问题,代码里就有问题,真是搞不懂。

zhang ming | 园豆:116 (初学一级) | 2014-05-13 11:12

嗯嗯,我还没有解决,查询出来的数据时2条,但是往数据库插入之后就3条数据,将SQL语句拿到 数据库中去执行,影响行数是2条。真的搞不懂!到底哪里有问题!

支持(0) 反对(0) 默者 | 园豆:183 (初学一级) | 2014-05-13 11:18

我发现我的问题,那就是我代码连接到另外一个数据库上了。囧。

支持(0) 反对(0) zhang ming | 园豆:116 (初学一级) | 2014-05-13 15:59
0

我发现我的问题,那就是我代码连接到另外一个数据库上了。

默者 | 园豆:183 (初学一级) | 2019-07-09 17:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册