@@ -26,8 +26,8 @@ public Row Clone()
26
26
27
27
public object GetValue ( int ordinal )
28
28
{
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 ) ) ;
31
31
32
32
if ( m_dataOffsets [ ordinal ] == - 1 )
33
33
return DBNull . Value ;
@@ -171,7 +171,7 @@ public Guid GetGuid(int ordinal)
171
171
if ( value is byte [ ] { Length : 16 } bytes )
172
172
return CreateGuidFromBytes ( Connection . GuidFormat , bytes ) ;
173
173
174
- throw new InvalidCastException ( "The value could not be converted to a GUID: {0}" . FormatInvariant ( value ) ) ;
174
+ return ( Guid ) value ;
175
175
}
176
176
177
177
public short GetInt16 ( int ordinal )
@@ -203,11 +203,8 @@ public short GetInt16(int ordinal)
203
203
204
204
public int GetInt32 ( int ordinal )
205
205
{
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 ) ;
211
208
212
209
var columnDefinition = ResultSet . ColumnDefinitions [ ordinal ] ;
213
210
if ( columnDefinition . ColumnType is ColumnType . Decimal or ColumnType . NewDecimal )
@@ -443,6 +440,8 @@ public MySqlGeometry GetMySqlGeometry(int ordinal)
443
440
444
441
public MySqlDecimal GetMySqlDecimal ( int ordinal )
445
442
{
443
+ if ( IsDBNull ( ordinal ) )
444
+ return ( MySqlDecimal ) GetValue ( ordinal ) ;
446
445
var data = m_data . Slice ( m_dataOffsets [ ordinal ] , m_dataLengths [ ordinal ] ) . Span ;
447
446
var columnType = ResultSet . ColumnDefinitions ! [ ordinal ] . ColumnType ;
448
447
if ( columnType is ColumnType . NewDecimal or ColumnType . Decimal )
0 commit comments