【发布时间】:2012-08-27 05:06:33
【问题描述】:
我试图更新一个名为“instock”的字段(数据库中的类型是双精度),其中 itemcode 是一个值(访问数据库中的类型是长整数)。但是当我尝试更新它们时,我收到一条错误消息,提示“此 oledbparamterCollection 的索引 2 无效,计数为 2。谁能帮帮我?
strSQL = "UPDATE tblitem set instock = ? where itemcode= ? "
Using cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\POS.mdb"), _
cmd As New OleDbCommand(strSQL, cn)
cmd.Parameters.Add("?", OleDbType.Double)
cmd.Parameters.Add("?", OleDbType.integer)
cn.Open()
For Each ls As ListViewItem In ListItems.Items
If Not (ls.SubItems(1).Tag(0) = "n") Then
cmd.Parameters(1).Value = (ls.SubItems(1).Tag - ls.SubItems(1).Text)
cmd.Parameters(2).Value = ls.Tag
cmd.ExecuteNonQuery()
End If
Next ls
cn.Close()
End Using
谢谢,+ 我在执行此命令时收到此错误“找不到 double 类型的默认成员”:
strSQL = "UPDATE tblitem set instock = ? where itemcode= ? "
Using cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\POS.mdb"), _
cmd As New OleDbCommand(strSQL, cn)
cmd.Parameters.Add("?", OleDbType.Double)
cmd.Parameters.Add("?", OleDbType.Double)
cn.Open()
For Each ls As ListViewItem In SalesListItems.Items
If Not (ls.SubItems(1).Tag(0) = "n") Then
cmd.Parameters(0).Value = (CDbl(ls.SubItems(1).Tag) + CDbl(ls.SubItems(1).Text))
cmd.Parameters(1).Value = Integer.Parse(ls.Tag)
cmd.ExecuteNonQuery()
End If
Next ls
cn.Close()
End Using
【问题讨论】:
-
使用
Double.Parse和Integer.Parse而不是String。 -
即使我使用这个'cmd.Parameters(0).Value = Double.Parse((ls.SubItems(1).Tag) + (ls.SubItems( 1).Text)) cmd.Parameters(1).Value = Integer.Parse(ls.Tag)'
-
不,我在 ls.subitems(1).tag 中有一些值
-
ls.SubItems(1).Tag中的值无关紧要,重要的是类型。ListViewItem.Tag是类型对象,Double.Parse需要类型字符串。通过使用显式转换它:Double.Parse((string)ls.SubItems(1).Tag)
标签: vb.net ms-access parameters