@@ -54,17 +54,9 @@ public MySqlCommand(string commandText, MySqlConnection connection, MySqlTransac
54
54
55
55
public override void Cancel ( ) => Connection . Cancel ( this ) ;
56
56
57
- public override int ExecuteNonQuery ( )
58
- {
59
- ResetCommandTimeout ( ) ;
60
- return ExecuteNonQueryAsync ( IOBehavior . Synchronous , CancellationToken . None ) . GetAwaiter ( ) . GetResult ( ) ;
61
- }
57
+ public override int ExecuteNonQuery ( ) => ExecuteNonQueryAsync ( IOBehavior . Synchronous , CancellationToken . None ) . GetAwaiter ( ) . GetResult ( ) ;
62
58
63
- public override object ExecuteScalar ( )
64
- {
65
- ResetCommandTimeout ( ) ;
66
- return ExecuteScalarAsync ( IOBehavior . Synchronous , CancellationToken . None ) . GetAwaiter ( ) . GetResult ( ) ;
67
- }
59
+ public override object ExecuteScalar ( ) => ExecuteScalarAsync ( IOBehavior . Synchronous , CancellationToken . None ) . GetAwaiter ( ) . GetResult ( ) ;
68
60
69
61
public new MySqlDataReader ExecuteReader ( ) => ( MySqlDataReader ) base . ExecuteReader ( ) ;
70
62
@@ -174,16 +166,44 @@ protected override DbDataReader ExecuteDbDataReader(CommandBehavior behavior)
174
166
public override Task < int > ExecuteNonQueryAsync ( CancellationToken cancellationToken ) =>
175
167
ExecuteNonQueryAsync ( AsyncIOBehavior , cancellationToken ) ;
176
168
177
- internal Task < int > ExecuteNonQueryAsync ( IOBehavior ioBehavior , CancellationToken cancellationToken ) =>
178
- ! IsValid ( out var exception ) ? Utility . TaskFromException < int > ( exception ) :
179
- m_commandExecutor . ExecuteNonQueryAsync ( CommandText , m_parameterCollection , ioBehavior , cancellationToken ) ;
169
+ internal async Task < int > ExecuteNonQueryAsync ( IOBehavior ioBehavior , CancellationToken cancellationToken )
170
+ {
171
+ ResetCommandTimeout ( ) ;
172
+ using ( var reader = ( MySqlDataReader ) await ExecuteReaderAsync ( CommandBehavior . Default , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) )
173
+ {
174
+ do
175
+ {
176
+ while ( await reader . ReadAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) )
177
+ {
178
+ }
179
+ } while ( await reader . NextResultAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ) ;
180
+ return reader . RecordsAffected ;
181
+ }
182
+ }
180
183
181
184
public override Task < object > ExecuteScalarAsync ( CancellationToken cancellationToken ) =>
182
185
ExecuteScalarAsync ( AsyncIOBehavior , cancellationToken ) ;
183
186
184
- internal Task < object > ExecuteScalarAsync ( IOBehavior ioBehavior , CancellationToken cancellationToken ) =>
185
- ! IsValid ( out var exception ) ? Utility . TaskFromException < object > ( exception ) :
186
- m_commandExecutor . ExecuteScalarAsync ( CommandText , m_parameterCollection , ioBehavior , cancellationToken ) ;
187
+ internal async Task < object > ExecuteScalarAsync ( IOBehavior ioBehavior , CancellationToken cancellationToken )
188
+ {
189
+ ResetCommandTimeout ( ) ;
190
+ var hasSetResult = false ;
191
+ object result = null ;
192
+ using ( var reader = ( MySqlDataReader ) await ExecuteReaderAsync ( CommandBehavior . SingleResult | CommandBehavior . SingleRow , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) )
193
+ {
194
+ do
195
+ {
196
+ var hasResult = await reader . ReadAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
197
+ if ( ! hasSetResult )
198
+ {
199
+ if ( hasResult )
200
+ result = reader . GetValue ( 0 ) ;
201
+ hasSetResult = true ;
202
+ }
203
+ } while ( await reader . NextResultAsync ( ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ) ;
204
+ }
205
+ return result ;
206
+ }
187
207
188
208
protected override Task < DbDataReader > ExecuteDbDataReaderAsync ( CommandBehavior behavior , CancellationToken cancellationToken )
189
209
{
0 commit comments