SqlDataReader的int转换成INT?

问题描述 投票:0回答:2

我需要为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);
         }
      }
c# sqldatareader
2个回答
2
投票

很抱歉,但这些代码没有什么意义。显然,Apvl_Lvl_Id应该是column ordinal - 有效地在一排列的从零开始计数 - 您检查是为DBNull。然后,您要实际列的值分配给该序?除此之外,就是没有办法可以分配nullint。引入一个单独的变量,也就是说,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
投票

为什么你不只是设置

Apvl_lvl_Id = null;
© www.soinside.com 2019 - 2024. All rights reserved.