我需要为Apvl_Lvl_Id返回NULL或空值,如果SQL结果,因为这传递Apvl_Lvl_Id值不能处理的值,如果它不符合该实例的现有价值整合返回NULL。
我想不通,我错过了什么,希望有人能提供一些指针。希望下面的代码是足够的一个例子。
while (dr.Read())
{
if(dr.IsDBNull(Apvl_Lvl_Id))
{
int? Apvl_Lvl_IdNULL;
Apvl_Lvl_Id = Apvl_Lvl_IdNULL;
}
else
{
Apvl_Lvl_Id = dr.GetInt32(0);
}
}
很抱歉,但这些代码没有什么意义。显然,Apvl_Lvl_Id
应该是column ordinal - 有效地在一排列的从零开始计数 - 您检查是为DBNull。然后,您要实际列的值分配给该序?除此之外,就是没有办法可以分配null
到int
。引入一个单独的变量,也就是说,Apvl_Lvl_Value
,使其成为Nullable<int>
(或int?
)并指定该列的值根据需要(实际值或null
)。
在“短”,代码更应该是这样的:
while (dr.Read())
{
int? Apvl_Lvl_Value;
// Check if the value of the column with the ordinal Apvl_Lvl_Id is DBNull
if(dr.IsDBNull(Apvl_Lvl_Id))
{
// If so, use .NET "null" for the rest of the logic.
Apvl_Lvl_Value = null;
}
else
{
// Use the actual columns (non-NULL) value.
Apvl_Lvl_Value = dr.GetInt32(Apvl_Lvl_Id);
}
// Do something with the column's value, stored in Apvl_Lvl_Value
}
现在,这里有些事情是猜测这是不是真的清楚,否则从你的问题,但总体上,上面是一个“模式”,其中一个会使用IsDBNull()
和Get*()
方法一起。
为什么你不只是设置
Apvl_lvl_Id = null;