access中插入时如何处理空字段

How to handle null field when inserting in access

我正在尝试将表单中的值插入到 Access 数据库中,但当字段值为 Null 时出现错误。即使我使用 = DBNull.Value.

我仍然会收到错误

前 8 个值不能是 Null,因为这些是必填字段,但如果字段为空,一旦到达成本,我就会收到此错误。

第 577 行是 da.Update(ds, "EquipList")

这是我的代码:

 Try
        Dim con As New OleDb.OleDbConnection
        Dim ds As New DataSet
        Dim da As OleDb.OleDbDataAdapter
        Dim sql As String
        con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\equip_full.mdb;Jet OLEDB:Database Password=matt"
        con.Open()

        sql = "SELECT * FROM EquipList"
        da = New OleDb.OleDbDataAdapter(sql, con)

        da.Fill(ds, "EquipList")
        Dim cb As New OleDb.OleDbCommandBuilder(da)
        Dim dsNewRow As DataRow
        dsNewRow = ds.Tables("EquipList").NewRow()

        ' Equipment Information fields

        dsNewRow.Item(0) = UniqueID
        dsNewRow.Item(1) = InvNumber
        dsNewRow.Item(2) = Item

        dsNewRow.Item(3) = Type

        dsNewRow.Item(4) = Description

        dsNewRow.Item(5) = Manufacturer
        dsNewRow.Item(6) = Model_No
        dsNewRow.Item(7) = Serial_No
        If Cost = "" Then
            dsNewRow.Item(8) = DBNull.Value
        Else
            dsNewRow.Item(8) = Cost
        End If
        If Cost_Centre = "" Then
            dsNewRow.Item(9) = DBNull.Value
        Else
            dsNewRow.Item(9) = Cost_Centre
        End If

        'dsNewRow 10 to 39

        ds.Tables("EquipList").Rows.Add(dsNewRow)
        da.Update(ds, "EquipList")
        con.Close()

        MsgBox(Description & " has successfully been added to the system.")

 Catch ex As Exception
        MsgBox("Unable to connect to the database " & ex.ToString)
        Exit Sub
 End Try

更新:我的代码没问题,只是 MsgBox 有问题。 MsgBox 无法显示 Null

的值

删除 MsgBox 解决了这个问题。反正就是用来测试的。

如果您不将其设置为任何其他值,则应将其保留为空。 你试过了吗

   If Cost > "" Then
        dsNewRow.Item(8) = Cost
    End If

?


字段是否可以为空? 如果它不能为空,您也可以尝试将其设置为零:

   If Cost > "" Then
        dsNewRow.Item(8) = Cost
   Else
        dsNewRow.Item(8) = 0
   End If

您不需要将日期或字符串值显式设置为 null,如果它可以为 null,则不设置它应该默认为 null,而您的货币价值可能不是。

例如,您的其他值应适用于:

If Cost_Centre > "" Then
    dsNewRow.Item(9) = Cost_Centre
End If

这都是假设您的值可以为空,或者它们将接受 null 作为有效值。您是否通过Access界面确认过?

如果字符串值不接受null,则默认为空字符串,与空文本框的值相同。那么,您应该能够无条件地存储值,就像您处理所需值一样:

   If Cost > "" Then
        dsNewRow.Item(8) = Cost
   Else
        dsNewRow.Item(8) = 0
   End If
   dsNewRow.Item(9) = Cost_Centre

稍微修改 Beth 的 post,以防字段中有 space 或其他内容。

 If len(Cost) > 0 Then
    dsNewRow.Item(8) = Cost
End If