Index: MappedStatement.cs =================================================================== --- MappedStatement.cs (revision 557253) +++ MappedStatement.cs (working copy) @@ -172,7 +172,46 @@ } } - object dataBaseValue = mapping.TypeHandler.GetDataBaseValue(((IDataParameter)command.Parameters[parameterName]).Value, result.GetType()); + //"Normalize" System.DBNull parameters + IDataParameter dataParameter = + ((IDataParameter)command.Parameters[parameterName]); + + object dbValue = dataParameter.Value; + if (dbValue == System.DBNull.Value) { + //For some reasong the following is false + //for string arguments... + if (dataParameter.IsNullable) + { + dbValue = null; + } + else { + const byte NUMERIC_NULL_VALUE = 0; + switch (dataParameter.DbType) + { + case DbType.Boolean: + dbValue = false; + break; + case DbType.UInt16: + case DbType.UInt32: + case DbType.UInt64: + case DbType.Int16: + case DbType.Int32: + case DbType.Int64: + case DbType.Decimal: + case DbType.Double: + case DbType.Single: + case DbType.Byte: + case DbType.VarNumeric: + dbValue = NUMERIC_NULL_VALUE; + break; + default: //See previous comment + dbValue = null; + break; + } + } + } + + object dataBaseValue = mapping.TypeHandler.GetDataBaseValue(dbValue, result.GetType()); request.IsRowDataFound = request.IsRowDataFound || (dataBaseValue != null); request.ParameterMap.SetOutputParameter(ref result, mapping, dataBaseValue);