Foxtable(狐表)用户栏目专家坐堂 → 关于参数化SQLCommand的一个问题


  共有2235人关注过本帖树形打印复制链接

主题:关于参数化SQLCommand的一个问题

帅哥哟,离线,有人找我吗?
czy66ds
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1690 积分:16438 威望:0 精华:0 注册:2013/7/31 13:03:00
关于参数化SQLCommand的一个问题  发帖心情 Post By:2018/9/4 10:25:00 [显示全部帖子]

下面代码是对表T1循环,生成入库记录,运行正确:

For Each r In T1.Rows
    '+++++++如果当前行条码已轮询过,则越过++++++++++
    If tms.Contains(r("条码"))= False Then
        tms.Add(r("条码"))
        '+++++++添加入库记录+++++++++++++++++++++
        m = T1.Compute("sum(数量)","条码 = '" & r("条码") & "'") '按条码汇总数量
        cmd.CommandText = " INSERT INTO  入库记录表 (条码,类型,来源,日期,店铺,编码,数量,备注)  " & _
        "VALUES('" & r("条码") & "','" & TB1.VALUE & "','" & ZY.value & "','" & DTP.Value & "','" & user.name & "','" & bm & "'," & m & ",'" & TB2.VALUE & "')"
        cmd.ExecuteNonQuery
    End If
Next

 

但是参数化SQLCommand后却只能保存一条入库记录,并报错“已添加了具有相同键项”,不知何故:

For Each r In T1.Rows
    '+++++++如果当前行条码已轮询过,则越过++++++++++
    If tms.Contains(r("条码"))= False Then
        tms.Add(r("条码"))
        '+++++++添加入库记录+++++++++++++++++++++
         cmd.CommandText = " INSERT INTO  入库记录表 (条码,类型,来源,日期,店铺,编码,数量,备注) VALUES(?,?,?,?,?,?,?,?,?)"
        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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1690 积分:16438 威望:0 精华:0 注册:2013/7/31 13:03:00
  发帖心情 Post By:2018/9/4 12:34:00 [显示全部帖子]

谢谢

测试结果:

按3楼测试,还是只生成一条记录

按2楼测试,产生了足够的记录,但是最后报一条错误“索引超出了数组界限”,同时感到不方便:如果循环外还需要NEWcommand,需要另外定义。

总之,感到这个参数化command还不完善。


 回到顶部
帅哥哟,离线,有人找我吗?
czy66ds
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1690 积分:16438 威望:0 精华:0 注册:2013/7/31 13:03:00
  发帖心情 Post By:2018/9/5 11:08:00 [显示全部帖子]

再次感谢2、3楼。测试通过。

之前按三楼的办法之所以只生成一条记录,原因在于

语句cmd.CommandText = " INSERT INTO  入库记录表 (条码,类型,来源,日期,店铺,编码,数量,备注) VALUES.....

写到循环体外,而循环体内还有其他cmd.CommandText语句。

将语句cmd.CommandText = " INSERT INTO  入库记录表 (条码,类型,来源,日期,店铺,编码,数量,备注)VALUES.....

写到循环体内就好了。


 回到顶部