如何从数据库返回空值

Kpt*_*aos 2 c# sql dbnull

我试图用我的查询返回的列表填充组合框.当我执行我的程序时,它给我一个指定的强制转换无效错误(我在页面加载事件上执行).除了主键之外,我必须使用的数据库中的每个字段都可以为null.所以我尝试使用DBNull.Value但它无法使我的(int)阅读器字段起作用.我已提供下面的代码以便更好地理解.如何让我的(int)读者使用我的语句,以便在有空值时可以读取?

CustData cd = new CustData();
cd.CustomerID = (int)reader["CustomerID"];
cd.Name = reader["Name"] != DBNull.Value ? reader["Name"].ToString() : string.Empty;
cd.ShippingAddress = reader["ShippingAddress"] != DBNull.Value ? reader["ShippingAddress"].ToString() : string.Empty;
cd.ShippingCity = reader["ShippingCity"] != DBNull.Value ? reader["ShippingCity"].ToString() : string.Empty;
cd.ShippingState = reader["ShippingState"] != DBNull.Value ? reader["ShippingState"].ToString() : string.Empty;
cd.ShippingZip = (int)reader["ShippingZip"];
cd.BillingAddress = reader["BillingAddress"] != DBNull.Value ? reader["BillingAddress"].ToString() : string.Empty;
cd.BillingCity = reader["BillingCity"] != DBNull.Value ? reader["BillingCity"].ToString() : string.Empty;
cd.BillingState = reader["BillingState"] != DBNull.Value ? reader["BillingState"].ToString() : string.Empty;
cd.BillingZip = (int)reader["BillingZip"];
cd.Territory = reader["Territory"] != DBNull.Value ? reader["Territory"].ToString() : string.Empty;
cd.Category = reader["Category"] != DBNull.Value ? reader["Category"].ToString() : string.Emptyy
Run Code Online (Sandbox Code Playgroud)

Bel*_*gix 5

那是因为int不可空.您需要使用int?nullable<int>(长手)允许它为int或null值.

然后,您可以使用通常的.HasValue.Value等,以获得从该项目的价值.

编辑:提高我对此答案的评论的可见性.我建议不要检查NULL并将Zero存储到您的属性中,因为当您保存回来时,即使系统没有更改任何内容,您也会将Null更改为零.现在,报告等可以区分NULL和Zero(经常)并且可以开始做奇怪的事情!

Null不等于零!! 如果你认为它是作为一种解决方法...如果我真的想记录零会怎么样?你如何区分真零和"现在为零"的伎俩?做得对,救你自己的痛苦!