C#ADO.Net无法确定条件表达式的类型,因为DBNull.Value和int之间没有隐式转换

时间:2012-01-30 17:09:18

标签: c# ado.net

我正在编写一个将数据插入访问数据库的小应用程序,到目前为止还不错,但我似乎无法在可空字段中插入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不一样......

任何人都可以帮助我吗?

4 个答案:

答案 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]);