Search code examples
c#sqlnulldatareader

Can't check null value with these 2 ways C# datareader Null value Error


The problem is ; I use this code inside class and call class from my main form. I got error about my datareader cant get null value. How can I check coming data from my sp is not null. as inside code if I see null I change it and return as outval (0000)

public string opt()
{
   string strng= "";
   string outval= "";
   SqlConnection conn = new SqlConnection();
   conn.ConnectionString = ConfigurationManager.ConnectionStrings["nmrbg"].ConnectionString;
   conn.Open();
   SqlCommand cmd = new SqlCommand("nmp_sp_sy", conn);
   cmd.CommandType = CommandType.StoredProcedure;
   SqlDataReader rdr = cmd.ExecuteReader();    
   // if (rdr.HasRows)
   // {
   //     while (rdr.Read())
   //     {
   //        int nm= rdr.GetInt32(0);
   //        strng= Convert.ToString(nm);
   //        outval= strng;
   //     }
   // }
   while (rdr.Read())
   {
      int nm= rdr.GetInt32(0);
      strng= Convert.ToString(nm);
      outval= strng;
   }
   if (!rdr.HasRows)
   {
      outval= "0000";
   }
   rdr.Close();
   rdr.Dispose();
   conn.Close();
   conn.Dispose();
   return outval;
}

`

Sp is ;

Begin

    Begin Transaction
    DECLARE @minSira int

    select  @minSira=Min(siraNo) 
    from nmr_tbl_srbklynlr 
    where turId=2 and aktifPasif=1

    UPDATE top (1) nmr_tbl_srbklynlr
    SET aktifPasif = 0
    Where siraNo=@minSira

    select @minSira
    Commit Transaction

End

Solution

  • Test returning values on null: Database could well return null on int. Wrap IDisposable into using: that prevents resource leakage on both normal flow and exceptions.

    public string opt() {
      using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["nmrbg"].ConnectionString)) {
        conn.Open();
    
        using (SqlCommand cmd = new SqlCommand("nmp_sp_sy", conn)) {
          cmd.CommandType = CommandType.StoredProcedure;
    
          using (SqlDataReader rdr = cmd.ExecuteReader()) {
            // If there's no records to read (rdr is empty) return default
            if (!rdr.Read())
              return "0000";
    
            Object rawData = rdr.GetValue(0);
    
            if (Object.RefrenceEquals(null, rawData))  
              return "0000"; // <- Or whatever on null value
            else
              return rawData.ToString();    
          }
        }
      }
    }