0

我试图更新一个名为“instock”的字段(数据库中的类型是双精度的),其中项目代码是一个值(类型是访问数据库中的长整数)。但是,当我尝试更新它们时,我收到一条错误消息,提示“此 oledbparamterCollection 的索引 2 无效,count=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
4

1 回答 1

1

.NET 类库中的索引从 0 开始,包括 ADO.NET 1

Parameters(1)表示“第二个参数”,Parameters(2)表示“第三个参数”(此处无效)。


1这并非适用于所有集合,但它是当今最流行的惯例。例如,Outlook 对象模型中的集合,它是暴露给 .NET 的 COM,索引仍然是基于 1 的 ..

于 2012-08-26T21:00:28.983 回答