Я бы попытался получить доступ по индексу вместо имени столбца, на тот случай, если вы передаете несуществующее имя столбца.
Кроме того, убедитесь, что вы обернули свое устройство чтения блоком использования, так что в любом случае, даже если есть исключение, ваше устройство чтения будет правильно закрыто и расположено, например, таким образом:
...
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]);
}
}
}