我正在尝试将值从表单插入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修复了问题。无论如何它只是用于测试。
答案 0 :(得分:1)
如果不将其设置为其他任何内容,则应将其保留为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,而货币值可能不是。
例如,您的其他价值应与:
一起使用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
答案 1 :(得分:0)
如果字段中有空格或其他内容,请稍微修改Beth的帖子。
If len(Cost) > 0 Then
dsNewRow.Item(8) = Cost
End If