【问题标题】:How to insert Listbox items in MS Access database in a single row如何在单行中插入 MS Access 数据库中的列表框项目
【发布时间】:2018-07-16 11:00:32
【问题描述】:

我有以下代码:

 Try
    Dim queryString As String
    queryString = "Insert into ServiceRecords([Personnel]) Values(@Personnels)"
    command1 = New OleDbCommand(queryString, connection)

    For i As Integer = 0 To Me.ListBox1.Items.Count + 1
        command1.Parameters.AddWithValue("Personnels", ListBox1.Items(i))
        command1.Parameters.Clear()
        command1.ExecuteNonQuery()
    Next
Catch ex As Exception

End Try

但我收到以下错误,我不知道如何解决它。我认为这是因为我的代码。

这就是我得到的:

【问题讨论】:

  • .AddWithValue 不是最佳选择。尝试改用.Add("Personnels",DbType.String).Value = ListBox1.Items(i))
  • 由于+1,您将超出该循环的范围,以及为什么在 executeNonQuery 之前清除参数集合的区域?

标签: vb.net visual-studio visual-studio-2013


【解决方案1】:

让我们回顾一下。

首先,正如 muffi 建议的那样,使用 Add 方法而不是 .AddWithValue,而不是 DBType 使用 OLEDBType。 OleDBType 中没有 .String 类型。您必须检查您的 Access db 以获得正确的数据类型。可能是 VarChar。此外,参数名称应与查询字符串中的参数名称匹配。对于 Access,位置很重要,但对于其他数据库,名称很重要。

其次,正如查尔斯建议的那样,将加一改为负一。大多数人从一开始计数,但计算机通常从零开始,因此 ListBox 的上索引比计数小一(记住你从零开始而不是一)。

第三,正如查尔斯也指出在执行之前清除参数是错误的。那么您的参数中将没有任何内容。根本没有必要清除它们,因为您在循环的每次迭代中都覆盖了 Value 属性,并且我已经在循环之外设置了名称和数据类型,因为它们保持不变。我们不想在每次迭代的属性不变时重置它们。

command1.Parameters.Add("@Personnels", OleDbType.VarChar)
For i As Integer = 0 To ListBox1.Count -1
    command1.Parameters("@Personnels").Value = ListBox1.Items(i)
    command1.ExecuteNonQuery
Next

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多