如何抢占将 DBNull 分配给 int 的尝试?
How can I preempt the attempted assignment of DBNull to an int?
以下代码:
foreach (DataRow fillRateDataRow in dtFillRateResults.Rows)
{
. . .
var frbdbc = new FillRateByDistributorByCustomer
{
ShortName = fillRateDataRow["ShortName"].ToString(),
Unit = fillRateDataRow["Unit"].ToString(),
CustNumber = fillRateDataRow["Custno"].ToString(),
MemberItemCode = fillRateDataRow["MemberItemCode"].ToString(),
Qty = Convert.ToInt32(fillRateDataRow["Qty"]),
QtyShipped = Convert.ToInt32(fillRateDataRow["QtyShipped"]),
ShipVariance = fillRateDataRow["ShipVariance"].ToString(),
CWeek = fillRateDataRow["CWeek"].ToString(),
PAItemCode = fillRateDataRow["PAItemCode"].ToString(),
PADescription = fillRateDataRow["PADescription"].ToString(),
TransactionType = fillRateDataRow["TransactionType"].ToString(),
SplitCase = fillRateDataRow["SplitCase"].ToString(),
ReasonCode = fillRateDataRow["ReasonCode"].ToString(),
ReasonDescription = fillRateDataRow["ReasonDescription"].ToString(),
CompanyName = fillRateDataRow["CompanyName"].ToString()
};
...经常失败一次,“无法将对象从 DBNull 转换为其他类型。
异常来源:mscorlib
异常 StackTrace:在 System.DBNull.System.IConvertible.ToInt32(IFormatProvider 提供者)
在 System.Convert.ToInt32(对象值)"
所以似乎 Qty 或 QtyShipped 有时是 DBNull(字符串海洋中唯一的整数值)。
有没有办法说 "if it's DBNull, assign 0 to the var" 从而避免异常?
您可以使用条件表达式:
QtyShipped = fillRateDataRow["QtyShipped"] != DBNull.Value ? Convert.ToInt32(fillRateDataRow["QtyShipped"]) : 0
如果您需要做很多事情,为这个任务制作一个辅助方法可以让您缩小代码以提高可读性。
你也可以使用这个表达式:
QtyShipped = fillRateDataRow.Field<int?>("QtyShipped") ?? 0;
以下代码:
foreach (DataRow fillRateDataRow in dtFillRateResults.Rows)
{
. . .
var frbdbc = new FillRateByDistributorByCustomer
{
ShortName = fillRateDataRow["ShortName"].ToString(),
Unit = fillRateDataRow["Unit"].ToString(),
CustNumber = fillRateDataRow["Custno"].ToString(),
MemberItemCode = fillRateDataRow["MemberItemCode"].ToString(),
Qty = Convert.ToInt32(fillRateDataRow["Qty"]),
QtyShipped = Convert.ToInt32(fillRateDataRow["QtyShipped"]),
ShipVariance = fillRateDataRow["ShipVariance"].ToString(),
CWeek = fillRateDataRow["CWeek"].ToString(),
PAItemCode = fillRateDataRow["PAItemCode"].ToString(),
PADescription = fillRateDataRow["PADescription"].ToString(),
TransactionType = fillRateDataRow["TransactionType"].ToString(),
SplitCase = fillRateDataRow["SplitCase"].ToString(),
ReasonCode = fillRateDataRow["ReasonCode"].ToString(),
ReasonDescription = fillRateDataRow["ReasonDescription"].ToString(),
CompanyName = fillRateDataRow["CompanyName"].ToString()
};
...经常失败一次,“无法将对象从 DBNull 转换为其他类型。 异常来源:mscorlib 异常 StackTrace:在 System.DBNull.System.IConvertible.ToInt32(IFormatProvider 提供者) 在 System.Convert.ToInt32(对象值)"
所以似乎 Qty 或 QtyShipped 有时是 DBNull(字符串海洋中唯一的整数值)。
有没有办法说 "if it's DBNull, assign 0 to the var" 从而避免异常?
您可以使用条件表达式:
QtyShipped = fillRateDataRow["QtyShipped"] != DBNull.Value ? Convert.ToInt32(fillRateDataRow["QtyShipped"]) : 0
如果您需要做很多事情,为这个任务制作一个辅助方法可以让您缩小代码以提高可读性。
你也可以使用这个表达式:
QtyShipped = fillRateDataRow.Field<int?>("QtyShipped") ?? 0;