繁体   English   中英

如何从数据库返回空值

[英]How to return a null value from a database

我试图用我的查询返回的列表填充组合框。 当我执行我的程序时,它给我一个指定的强制转换无效错误(我在页面加载事件上执行)。 除了主键之外,我必须使用的数据库中的每个字段都可以为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

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

然后,您可以使用通常的.HasValue.Value等来获取项目的值。

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

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

使用nullable int,或者只是对你的int进行控制

reader["ShippingZip"] != DBNull.Value ? (int)reader["ShippingZip"] : default(int);

你应该为你的变量使用一个可以为null的int并抛出它,就像(int?) Int只能有一个值; 可空类型也可以为null。 使用可空类型时,可以查看属性.HasValue 这是MSDN页面: http//msdn.microsoft.com/en-us/library/2cf62fcy.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM