Can't return null (布尔值不能为空)

本文关键字:不能 布尔值 null return Can | 更新日期: 2023-09-27 18:16:53

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

格式化程序在试图反序列化时抛出异常消息:在尝试反序列化参数时出现错误http://tempuri.org/: someFuncResult。InnerException消息是"ValueType"系统。布尔值不能为空。请参阅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; }
        }

Can't return null (布尔值不能为空)

由于Nullable<bool>字段是最近引入的,所以我的服务的客户端引用没有更新。

数据库空值与标准空值不同

使用这个函数

 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"]);