【问题标题】:Update an MS Access database in a loop with paramaters with vb.net使用 vb.net 在循环中使用参数更新 MS Access 数据库
【发布时间】: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.ParseInteger.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


【解决方案1】:

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

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


1all 集合并非如此,但它是当今最流行的约定。例如,Outlook 对象模型中的集合,它是向 .NET 公开的 COM,索引仍然是基于 1 的..

【讨论】:

  • 谢谢 pst,我遇到了另一个错误,我已经在我的主要问题中解释了。你能帮帮我吗?
  • 见蒂姆的评论。一次解决一个问题。请注意,both 参数被声明为采用 Double 值,因此请确保 both 被赋予 Double 值..
  • no default member found for type double 是我尝试后得到的错误。 'cmd.Parameters(0).Value = (Double.Parse(ls.SubItems(1).Tag) + Double.Parse(ls.SubItems(1).Text))'
猜你喜欢
  • 1970-01-01
  • 2020-07-16
  • 2011-09-03
  • 2021-06-25
  • 1970-01-01
  • 2013-04-20
  • 2015-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多