SqlDataReader将Int转换为Int吗?

时间:2019-02-08 11:24:03

标签: c# sqldatareader

如果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);
         }
      }

2 个答案:

答案 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;