如果SQL结果返回NULL,则我需要为Apvl_Lvl_Id返回NULL或空白值,因为积分将通过Apvl_Lvl_Id值,如果该值与该实例的现有值不匹配,则无法处理该值。
我无法弄清我所缺少的,希望有人可以提供一些指导。希望下面的代码足以作为示例。
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);
}
}
答案 0 :(得分:2)
对不起,但是该代码毫无意义。显然,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*()
方法。
答案 1 :(得分:1)
那你为什么不设置
Apvl_lvl_Id = null;