【发布时间】:2019-12-04 20:13:29
【问题描述】:
我正在使用 VB.NET 将记录插入到 MS Access 表中。我遇到了一个问题,我要插入一条记录,其中一个值为空白。 VB.NET 抛出一个错误,因为它说我要插入的字段需要一个值。
Sense_LanguageSource 表有六个字段,包括 ID 字段:
- LanguageSourceID(自动编号)
- SenseFK(编号)
- 语言代码(数字)
- SourceWord(短文本)
- LanguageSourceType(短文本)
- IsWaseieigo(是/否)
LanguageCode 字段也是一个外键,它链接到 LanguageCodeValue 表,其中包含 LanguageCode 的列表。
这是我正在运行以在 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 表中查找其 ID。因为我正在评估的特定对象没有 LanguageCode,所以第一个选择查询返回 0。当我尝试将 0 传递给插入命令时,我收到错误:
"You cannot add or change a record because a related record is required in table 'LanguageCodeValue'."
我不确定如何解决这个问题。我希望在Sense_LanguageSource 表和LanguageCodeValue 表之间有一个链接,但我不希望它需要为LanguageCode 插入一个值。是否可以在外键字段中插入空值?或者有没有办法让它不需要在这个字段中插入一个值?
【问题讨论】:
标签: sql vb.net ms-access-2016