以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 关于参数化SQLCommand的一个问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=124305) |
-- 作者:czy66ds -- 发布时间:2018/9/4 10:25:00 -- 关于参数化SQLCommand的一个问题 下面代码是对表T1循环,生成入库记录,运行正确: For Each r In T1.Rows
但是参数化SQLCommand后却只能保存一条入库记录,并报错“已添加了具有相同键项”,不知何故: For Each r In T1.Rows
|
-- 作者:有点甜 -- 发布时间:2018/9/4 10:40:00 -- 循环里面,每次都要new一个sqlcommand才行的。
|
-- 作者:有点蓝 -- 发布时间:2018/9/4 11:37:00 -- 加一个cmd.Parameters.Clear cmd.CommandText = " INSERT INTO 入库记录表 (条码,类型,来源,日期,店铺,编码,数量,备注) VALUES(?,?,?,?,?,?,?,?,?)" For Each r In T1.Rows \'+++++++如果当前行条码已轮询过,则越过++++++++++ If tms.Contains(r("条码"))= False Then tms.Add(r("条码")) \'+++++++添加入库记录+++++++++++++++++++++ cmd.Parameters.Clear cmd.Parameters.Add("@条码",r("条码")) cmd.Parameters.Add("@类型",TB1.VALUE) cmd.Parameters.Add("@来源",ZY.value) cmd.Parameters.Add("@日期",DTP.Value) cmd.Parameters.Add("@店铺",user.name) cmd.Parameters.Add("@编码",bm) cmd.Parameters.Add("@数量",m) cmd.Parameters.Add("@备注",TB2.VALUE) cmd.ExecuteNonQuery End If Next |
-- 作者:czy66ds -- 发布时间:2018/9/4 12:34:00 -- 谢谢 测试结果: 按3楼测试,还是只生成一条记录 按2楼测试,产生了足够的记录,但是最后报一条错误“索引超出了数组界限”,同时感到不方便:如果循环外还需要NEWcommand,需要另外定义。 总之,感到这个参数化command还不完善。 |
-- 作者:有点甜 -- 发布时间:2018/9/4 12:37:00 -- 回复4楼,2楼的方法,不可能有错。请认真测试。 |
-- 作者:有点蓝 -- 发布时间:2018/9/4 12:38:00 -- 3楼我测试没有问题。请上传实例说明 |
-- 作者:czy66ds -- 发布时间:2018/9/5 11:08:00 -- 再次感谢2、3楼。测试通过。 之前按三楼的办法之所以只生成一条记录,原因在于 语句cmd.CommandText = " INSERT INTO 入库记录表 (条码,类型,来源,日期,店铺,编码,数量,备注) VALUES..... 写到循环体外,而循环体内还有其他cmd.CommandText语句。 将语句cmd.CommandText = " INSERT INTO 入库记录表 (条码,类型,来源,日期,店铺,编码,数量,备注)VALUES..... 写到循环体内就好了。 |