我正在编写一个将数据插入访问数据库的小应用程序,到目前为止还不错,但我似乎无法在可空字段中插入NULL。
我试过了:
myAccessCommand.Parameters
.Add("@IDACCOMPAGNATEUR", OleDbType.Integer).Value =
(ActivityRegistration.id_invitee == 0
? DBNull.Value
: InviteeWebToSGM[ActivityRegistration.id_invitee]);
和
myAccessCommand.Parameters
.Add("@IDACCOMPAGNATEUR", OleDbType.Integer).Value =
(ActivityRegistration.id_invitee == 0
? (int?)null
: InviteeWebToSGM[ActivityRegistration.id_invitee]);
但两者都不适用于不同的问题。我最初的想法是使用DBNull.Value,但如果是INT或INT,它不能转换为INT附近的任何东西。我的第二次尝试工作,但返回一条错误消息,指出我的字段没有默认值,但它确实允许NULL。所以我的猜测是ADO.Net中的null与DBNull.value不一样......
任何人都可以帮助我吗?
答案 0 :(得分:3)
IMO DBNull.Value
绝对是最佳选择。
试
myAccessCommand.Parameters.Add("@IDACCOMPAGNATEUR", OleDbType.Integer).Value =
(ActivityRegistration.id_invitee == 0 ? DBNull.Value : (object) InviteeWebToSGM[ActivityRegistration.id_invitee]);
答案 1 :(得分:1)
尝试使用System.Data.SqlTypes.SqlInt32.Null
(或System.Data.SqlTypes.SqlInt32.Null.Value
,我不完全确定,现在无法尝试):
myAccessCommand.Parameters
.Add("@IDACCOMPAGNATEUR", OleDbType.Integer).Value =
(ActivityRegistration.id_invitee == 0
? System.Data.SqlTypes.SqlInt32.Null.Value
: InviteeWebToSGM[ActivityRegistration.id_invitee]);
答案 2 :(得分:1)
这可能是ADO.NET最烦人的事情,但事实就是如此。是的,您需要使用DBNull.Value,并修复编译错误,强制转换为对象。
myAccessCommand.Parameters.Add("@IDACCOMPAGNATEUR", OleDbType.Integer).Value =
(ActivityRegistration.id_invitee == 0)
? (object)DBNull.Value
: (object)InviteeWebToSGM[ActivityRegistration.id_invitee];
答案 3 :(得分:-1)
尝试使用
myAccessCommand.Parameters.Add("@IDACCOMPAGNATEUR", OleDbType.Integer?).Value =
(ActivityRegistration.id_invitee == 0 ? DBNull.Value : InviteeWebToSGM[ActivityRegistration.id_invitee]);