@@ -31,75 +31,85 @@ public async Task<ResultSet> ReadResultSetHeaderAsync(IOBehavior ioBehavior, Can
31
31
m_rowBuffered = null ;
32
32
MySqlException exception = null ;
33
33
34
- while ( true )
34
+ try
35
35
{
36
- var payload = await Session . ReceiveReplyAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
37
-
38
- var firstByte = payload . HeaderByte ;
39
- if ( firstByte == OkPayload . Signature )
40
- {
41
- var ok = OkPayload . Create ( payload ) ;
42
- RecordsAffected = ok . AffectedRowCount ;
43
- LastInsertId = ok . LastInsertId ;
44
- ColumnDefinitions = null ;
45
- State = ( ok . ServerStatus & ServerStatus . MoreResultsExist ) == 0
46
- ? ResultSetState . NoMoreData
47
- : ResultSetState . HasMoreData ;
48
- if ( State == ResultSetState . NoMoreData )
49
- break ;
50
- }
51
- else if ( firstByte == LocalInfilePayload . Signature )
36
+ while ( true )
52
37
{
53
- try
38
+ var payload = await Session . ReceiveReplyAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
39
+
40
+ var firstByte = payload . HeaderByte ;
41
+ if ( firstByte == OkPayload . Signature )
42
+ {
43
+ var ok = OkPayload . Create ( payload ) ;
44
+ RecordsAffected = ok . AffectedRowCount ;
45
+ LastInsertId = ok . LastInsertId ;
46
+ ColumnDefinitions = null ;
47
+ State = ( ok . ServerStatus & ServerStatus . MoreResultsExist ) == 0
48
+ ? ResultSetState . NoMoreData
49
+ : ResultSetState . HasMoreData ;
50
+ if ( State == ResultSetState . NoMoreData )
51
+ break ;
52
+ }
53
+ else if ( firstByte == LocalInfilePayload . Signature )
54
54
{
55
- var localInfile = LocalInfilePayload . Create ( payload ) ;
56
- using ( var stream = localInfile . FileName . StartsWith ( MySqlBulkLoader . StreamPrefix , StringComparison . Ordinal ) ?
57
- MySqlBulkLoader . GetAndRemoveStream ( localInfile . FileName ) :
58
- File . OpenRead ( localInfile . FileName ) )
55
+ try
59
56
{
60
- byte [ ] readBuffer = new byte [ 65536 ] ;
61
- int byteCount ;
62
- while ( ( byteCount = await stream . ReadAsync ( readBuffer , 0 , readBuffer . Length ) . ConfigureAwait ( false ) ) > 0 )
57
+ var localInfile = LocalInfilePayload . Create ( payload ) ;
58
+ using ( var stream = localInfile . FileName . StartsWith ( MySqlBulkLoader . StreamPrefix , StringComparison . Ordinal ) ?
59
+ MySqlBulkLoader . GetAndRemoveStream ( localInfile . FileName ) :
60
+ File . OpenRead ( localInfile . FileName ) )
63
61
{
64
- payload = new PayloadData ( new ArraySegment < byte > ( readBuffer , 0 , byteCount ) ) ;
65
- await Session . SendReplyAsync ( payload , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
62
+ byte [ ] readBuffer = new byte [ 65536 ] ;
63
+ int byteCount ;
64
+ while ( ( byteCount = await stream . ReadAsync ( readBuffer , 0 , readBuffer . Length ) . ConfigureAwait ( false ) ) > 0 )
65
+ {
66
+ payload = new PayloadData ( new ArraySegment < byte > ( readBuffer , 0 , byteCount ) ) ;
67
+ await Session . SendReplyAsync ( payload , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
68
+ }
66
69
}
67
70
}
71
+ catch ( Exception ex )
72
+ {
73
+ // store the exception, to be thrown after reading the response packet from the server
74
+ exception = new MySqlException ( "Error during LOAD DATA LOCAL INFILE" , ex ) ;
75
+ }
76
+
77
+ await Session . SendReplyAsync ( EmptyPayload . Create ( ) , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
68
78
}
69
- catch ( Exception ex )
79
+ else
70
80
{
71
- // store the exception, to be thrown after reading the response packet from the server
72
- exception = new MySqlException ( "Error during LOAD DATA LOCAL INFILE" , ex ) ;
73
- }
81
+ var reader = new ByteArrayReader ( payload . ArraySegment ) ;
82
+ var columnCount = ( int ) reader . ReadLengthEncodedInteger ( ) ;
83
+ ColumnDefinitions = new ColumnDefinitionPayload [ columnCount ] ;
84
+ m_dataOffsets = new int [ columnCount ] ;
85
+ m_dataLengths = new int [ columnCount ] ;
74
86
75
- await Session . SendReplyAsync ( EmptyPayload . Create ( ) , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
76
- }
77
- else
78
- {
79
- var reader = new ByteArrayReader ( payload . ArraySegment ) ;
80
- var columnCount = ( int ) reader . ReadLengthEncodedInteger ( ) ;
81
- ColumnDefinitions = new ColumnDefinitionPayload [ columnCount ] ;
82
- m_dataOffsets = new int [ columnCount ] ;
83
- m_dataLengths = new int [ columnCount ] ;
87
+ for ( var column = 0 ; column < ColumnDefinitions . Length ; column ++ )
88
+ {
89
+ payload = await Session . ReceiveReplyAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
90
+ ColumnDefinitions [ column ] = ColumnDefinitionPayload . Create ( payload ) ;
91
+ }
84
92
85
- for ( var column = 0 ; column < ColumnDefinitions . Length ; column ++ )
86
- {
87
93
payload = await Session . ReceiveReplyAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
88
- ColumnDefinitions [ column ] = ColumnDefinitionPayload . Create ( payload ) ;
89
- }
94
+ EofPayload . Create ( payload ) ;
90
95
91
- payload = await Session . ReceiveReplyAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
92
- EofPayload . Create ( payload ) ;
93
-
94
- LastInsertId = - 1 ;
95
- State = ResultSetState . ReadResultSetHeader ;
96
- break ;
96
+ LastInsertId = - 1 ;
97
+ State = ResultSetState . ReadResultSetHeader ;
98
+ break ;
99
+ }
97
100
}
98
- }
99
- BufferState = State ;
100
101
101
- if ( exception != null )
102
- throw exception ;
102
+ if ( exception != null )
103
+ throw exception ;
104
+ }
105
+ catch ( Exception ex )
106
+ {
107
+ ReadResultSetHeaderException = ex ;
108
+ }
109
+ finally
110
+ {
111
+ BufferState = State ;
112
+ }
103
113
104
114
return this ;
105
115
}
@@ -384,6 +394,7 @@ public Row GetCurrentRow()
384
394
}
385
395
386
396
public readonly MySqlDataReader DataReader ;
397
+ public Exception ReadResultSetHeaderException { get ; private set ; }
387
398
public MySqlCommand Command => DataReader . Command ;
388
399
public MySqlConnection Connection => DataReader . Connection ;
389
400
public MySqlSession Session => DataReader . Session ;
0 commit comments