我正在尝试将表单中的值插入到Access数据库中,但字段“值为”时出现错误Null
。即使使用,我仍然会收到错误消息= DBNull.Value
。
前8个值不能是Null
因为这些是必填字段,但是如果该字段为空,则一旦到达Cost,就会出现此错误。
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无法显示为空的值
删除MsgBox可以解决此问题。无论如何,它只是在那里进行测试。
如果您未将其设置为其他任何值,则应将其保留为null。你有没有尝试过
If Cost > "" Then
dsNewRow.Item(8) = Cost
End If
?
该字段可以为空吗?您也可以尝试将其设置为零(如果不能为null):
If Cost > "" Then
dsNewRow.Item(8) = Cost
Else
dsNewRow.Item(8) = 0
End If
您不需要将日期或字符串值显式设置为null,如果未设置,则应将其默认设置为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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句