无法返回null(System.Boolean不能为null)

时间:2014-08-06 19:01:47

标签: c# wcf visual-studio linq-to-sql

我想使用WCF服务从数据库返回int和bool值到WP页面。当数据库中的那些字段为null时,我得到一个例外:

  

格式化程序在尝试反序列化时抛出异常   消息:尝试反序列化参数时出错   http://tempuri.org/:someFuncResult。 InnerException消息是   'ValueType'System.Boolean'不能为null。请参阅InnerException   了解更多详情。

使用int类型我有同样的问题。

我的数据库看起来像:

[boolValue]    BIT    NULL,
[intValue]     INT    NULL,

我的服务实施:

     public someClass someFunc(int check)
    {
return (from a in datacontext.someTable
                where a.number == check
                select new someClass ()
                {
                    intValue2 = (int?)a.intValue ,
                    boolValue2 = (bool?)a.boolValue,                
                }).Single();
    }

我的服务界面:

    [OperationContract]
   someClass someFunc(int check);

    [DataContract]
        public class someClass 
        {
            [DataMember]
            public int? intValue2 { get; set; }
            [DataMember]
            public bool? boolValue2 { get; set; }
        }

2 个答案:

答案 0 :(得分:0)

最近引入Nullable<bool>字段时,我的服务的客户端参考未更新。更新参考后,它有效。

答案 1 :(得分:0)

数据库null与标准null

不同

使用此功能

 static bool ConvertToBool(object Dnull)
        {
            try
            {
                DBNull a = (DBNull)Dnull;
                string u = a.ToString();

                if (u.Length > 0)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            catch (InvalidCastException e)
            {
                return false;
            }

        }

bool Isnull = ConvertToBool(_sqldatareader["Name"]);

这项工作在mysql中很好。

相关问题