我正在尝试用查询返回的列表填充组合框。当我执行程序时,它给了我一个指定的强制转换无效错误(我在页面加载事件中执行了它)。除了主键外,我必须使用的数据库中的每个字段都可以为null。因此,我尝试使用DBNull.Value,但无法使我的(int)reader字段正常工作。为了更好的理解,我在下面提供了我的代码。我如何才能让我的(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
那是因为int
不能为空。您需要使用int?
或nullable<int>
(长手)将其设置为int或null值。
然后,您可以使用通常的.HasValue
和.Value
等,以获得从该项目的价值。
编辑:为了增强我对此答案的评论的可见性。我建议不要检查NULL并将零存储到属性中,因为这样一来,当您进行保存时,即使系统未进行任何更改,您也将Null更改为零。现在,报告等可能会(经常)区分NULL和零,并且可能开始做奇怪的事情!
空不等于零!如果您认为它确实可以解决...如果我确实确实想记录零,该怎么办?您如何区分真正的零和“现在为零”?做正确的事,省去自己的痛苦!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句