无法将空值插入 MS Access 中的外键字段

Can't insert null value into a foreign key field in MS Access

我正在使用 VB.NET 将记录插入 MS Access table。我 运行 遇到一个问题,我要插入一条记录,其中一个值为空。 VB.NET 抛出错误,因为它说我要插入的字段需要一个值。

Sense_LanguageSourcetable有六个字段包括ID字段:

LanguageCode 字段也是一个外键,它 link 到 LanguageCodeValue table,它包含一个 LanguageCodes 列表。

这是我 运行 在 VB.NET 中执行插入的代码:

'Finds the ID of the LanguageCode
sql = "SELECT [LanguageCodeID] FROM [LanguageCodeValue] WHERE [LanguageCode] = """ & ls.LanguageCode & """"
cmd = New OleDbCommand(sql, myConnection)
lcodeID = CInt(cmd.ExecuteScalar)

'Inserts the LanguageSource element
sql = "INSERT INTO [Sense_LanguageSource] ([SenseFK], [LanguageCode], [SourceWord], [LanguageSourceType], [IsWaseieigo]) VALUES (?, ?, ?, ?, ?)"

cmd = New OleDbCommand(sql, myConnection)
cmd.Parameters.Add(New OleDbParameter("[SenseFK]", senseID))
cmd.Parameters.Add(New OleDbParameter("[LanguageCode]", lcodeID))
cmd.Parameters.Add(New OleDbParameter("[SourceWord]", ls.SourceWord))
cmd.Parameters.Add(New OleDbParameter("[LanguageSourceType]", ls.LanguageSourceType))
cmd.Parameters.Add(New OleDbParameter("[IsWaseieigo]", ls.IsWaseieigo))

Try
    cmd.ExecuteNonQuery()
    cmd.Dispose()
Catch ex As Exception
    MsgBox(ex.Message)
End Try

问题是我传递给 LanguageCode 的值是 0。我的代码正在获取一个可能包含也可能不包含 LanguageCode 值的对象,并且 运行 宁 Select 查询在 LanguageCodeValue table 中找到它的 ID。因为我正在评估的特定对象没有 LanguageCode,所以第一个 select 查询 returns 0。当我尝试将 0 传递给插入命令时,出现错误:

"You cannot add or change a record because a related record is required in table 'LanguageCodeValue'."

我不确定如何解决这个问题。我希望 Sense_LanguageSource table 和 LanguageCodeValue table 之间有一个 link,但我不希望它被要求插入一个值LanguageCode。是否可以将空值插入外键字段?或者有没有办法让它不需要在这个字段中插入一个值?

好吧,我已经想出了解决这个问题的办法——在 LanguageCodeValueSense_LanguageSource 之间的关系上禁用参照完整性。可能不是最好的解决方案,但它确实允许我在外键字段中输入 0。

编辑:我找到了更好的方法。在 LanguageCodeValue table 上创建一个带有空白字段的 "Null" 记录,并在我想表明没有 LanguageCode 附加到 [=11= 时引用它] table.