@@ -26,8 +26,8 @@ public Row Clone()
2626
2727 public object GetValue ( int ordinal )
2828 {
29- if ( ordinal < 0 || ordinal > ResultSet . ColumnDefinitions ! . Length )
30- throw new ArgumentOutOfRangeException ( nameof ( ordinal ) , "value must be between 0 and {0}." . FormatInvariant ( ResultSet . ColumnDefinitions ! . Length ) ) ;
29+ if ( ordinal < 0 || ordinal >= ResultSet . ColumnDefinitions ! . Length )
30+ throw new ArgumentOutOfRangeException ( nameof ( ordinal ) , "value must be between 0 and {0}." . FormatInvariant ( ResultSet . ColumnDefinitions ! . Length - 1 ) ) ;
3131
3232 if ( m_dataOffsets [ ordinal ] == - 1 )
3333 return DBNull . Value ;
@@ -171,7 +171,7 @@ public Guid GetGuid(int ordinal)
171171 if ( value is byte [ ] { Length : 16 } bytes )
172172 return CreateGuidFromBytes ( Connection . GuidFormat , bytes ) ;
173173
174- throw new InvalidCastException ( "The value could not be converted to a GUID: {0}" . FormatInvariant ( value ) ) ;
174+ return ( Guid ) value ;
175175 }
176176
177177 public short GetInt16 ( int ordinal )
@@ -203,11 +203,8 @@ public short GetInt16(int ordinal)
203203
204204 public int GetInt32 ( int ordinal )
205205 {
206- if ( ordinal < 0 || ordinal > ResultSet . ColumnDefinitions ! . Length )
207- throw new ArgumentOutOfRangeException ( nameof ( ordinal ) , "value must be between 0 and {0}." . FormatInvariant ( ResultSet . ColumnDefinitions ! . Length ) ) ;
208-
209- if ( m_dataOffsets [ ordinal ] == - 1 )
210- throw new InvalidCastException ( ) ;
206+ if ( ordinal < 0 || ordinal >= ResultSet . ColumnDefinitions ! . Length || m_dataOffsets [ ordinal ] == - 1 )
207+ return ( int ) GetValue ( ordinal ) ;
211208
212209 var columnDefinition = ResultSet . ColumnDefinitions [ ordinal ] ;
213210 if ( columnDefinition . ColumnType is ColumnType . Decimal or ColumnType . NewDecimal )
@@ -443,6 +440,8 @@ public MySqlGeometry GetMySqlGeometry(int ordinal)
443440
444441 public MySqlDecimal GetMySqlDecimal ( int ordinal )
445442 {
443+ if ( IsDBNull ( ordinal ) )
444+ return ( MySqlDecimal ) GetValue ( ordinal ) ;
446445 var data = m_data . Slice ( m_dataOffsets [ ordinal ] , m_dataLengths [ ordinal ] ) . Span ;
447446 var columnType = ResultSet . ColumnDefinitions ! [ ordinal ] . ColumnType ;
448447 if ( columnType is ColumnType . NewDecimal or ColumnType . Decimal )
0 commit comments