Search code examples
c#debuggingruntime-erroridatareader

IDataReader runtime error


I'm trying to populate my Request using the IDataReader but for some of the properties the values are coming back as null from the database, this then throws an exception because it doesn't like the null.

    public static void Populate(IDataReader datareader, Request request)
    {
        request._requestID = datareader.IsDBNull(datareader.GetOrdinal("RequestID")) ? null : (int?)datareader.GetInt32(datareader.GetOrdinal("RequestID"));
        request._appversion = datareader.GetString(datareader.GetOrdinal("AppVersion"));
        request._apprequestguid = datareader.IsDBNull(datareader.GetOrdinal("AppRequestGUID")) ? null : datareader.GetString(datareader.GetOrdinal("AppRequestGUID"));
        request._sourceip = datareader.IsDBNull(datareader.GetOrdinal("SourceIP")) ? null : datareader.GetString(datareader.GetOrdinal("SourceIP"));
        request._cli = datareader.IsDBNull(datareader.GetOrdinal("CLI")) ? null : datareader.GetString(datareader.GetOrdinal("CLI"));
        request._handsetid = datareader.IsDBNull(datareader.GetOrdinal("HandsetID")) ? null : datareader.GetString(datareader.GetOrdinal("HandsetID"));
        request._service = datareader.IsDBNull(datareader.GetOrdinal("Service")) ? null : datareader.GetString(datareader.GetOrdinal("Service"));
        request._requestrespcode = datareader.IsDBNull(datareader.GetOrdinal("RequestRespCode")) ? null : datareader.GetString(datareader.GetOrdinal("RequestRespCode"));
        request._fraudmatchid = datareader.IsDBNull(datareader.GetOrdinal("FraudMatchID")) ? null : (int?)datareader.GetInt32(datareader.GetOrdinal("FraudMatchID"));
        request._action = datareader.IsDBNull(datareader.GetOrdinal("Action")) ? null : datareader.GetString(datareader.GetOrdinal("Action"));
        request._detail = datareader.IsDBNull(datareader.GetOrdinal("Detail")) ? null : datareader.GetString(datareader.GetOrdinal("Detail"));
        request._apprespcode = datareader.IsDBNull(datareader.GetOrdinal("AppRespCode")) ? null : datareader.GetString(datareader.GetOrdinal("AppRespCode"));
        request._createddttm = datareader.IsDBNull(datareader.GetOrdinal("CreatedDttm")) ? null : (DateTime?)datareader.GetDateTime(datareader.GetOrdinal("CreatedDttm"));
        request._modifieddttm = datareader.IsDBNull(datareader.GetOrdinal("ModifiedDttm")) ? null : (DateTime?)datareader.GetDateTime(datareader.GetOrdinal("ModifiedDttm"));
    }

I have tried adding but when I debug it doesn't reach the if statement.

        if (request._appversion.Equals(null))
        {
            request._appversion = string.Empty;
        }

What code can I add code so that it doesn't break if it gets a null from the database?


Solution

  • You can try this approach:

    request._detail = Convert.ToString(datareader.Item("Detail"));
    

    It should work because Convert.ToString(Convert.DBNull) = String.Empty.

    Reference: