Search code examples
c#asp.netsqldatareaderdbnull

System.IndexOutOfRangeException on SQLDataReader Value Using C#


I have a SQLDataReader that returns three integers. However, there are occasions when two of the integers will return null values.

To get round this I wrote the following:

int shoppingCartHeadID = 0;
int billID = 0;
int delID = 0;

conn.Open();
reader = comm.ExecuteReader();
if (reader.Read())
{
       shoppingCartHeadID = Convert.ToInt32(reader["shoppingCartHeadID"]);

       if (!reader.IsDBNull(billID))
       {
            billID = Convert.ToInt32(reader["billID"]);
       }

       if (!reader.IsDBNull(delID))
       {
            delID = Convert.ToInt32(reader["delID"]);
       }                
}
reader.Close();

Unfortunately I'm still getting the error message. Any suggestions?

PS I also tried this with no luck

if (reader["billID"] != null)


Solution

  • I would try to access by index instead of column name, just in case you are passing a not existing column name.

    Also, make sure you wrap your reader with a using block so in any case even if there is an exception your reader will be properly closed and disposed, for example in this way:

    ...
    using(var reader = comm.ExecuteReader())
    {
        if (reader.Read())
        {
               shoppingCartHeadID = Convert.ToInt32(reader[0]);
    
               if (!reader.IsDBNull(1))
               {
                    billID = Convert.ToInt32(reader[1]);
               }
    
               if (!reader.IsDBNull(2))
               {
                    delID = Convert.ToInt32(reader[2]);
               }
        }
    }