33using System . Collections . Generic ;
44using System . Data ;
55using System . Linq ;
6+ using System . Threading . Tasks ;
67
78namespace OptimaJet . Workflow . MySQL
89{
@@ -114,10 +115,15 @@ public static int ExecuteCommand(MySqlConnection connection, string commandText,
114115 }
115116
116117 public static T [ ] Select ( MySqlConnection connection , string commandText , params MySqlParameter [ ] parameters )
118+ {
119+ return SelectAsync ( connection , commandText , parameters ) . Result ;
120+ }
121+
122+ public static async Task < T [ ] > SelectAsync ( MySqlConnection connection , string commandText , params MySqlParameter [ ] parameters )
117123 {
118124 if ( connection . State != ConnectionState . Open )
119125 {
120- connection . Open ( ) ;
126+ await connection . OpenAsync ( ) . ConfigureAwait ( false ) ;
121127 }
122128
123129 using ( var command = connection . CreateCommand ( ) )
@@ -126,21 +132,23 @@ public static T[] Select(MySqlConnection connection, string commandText, params
126132 command . CommandText = commandText ;
127133 command . CommandType = CommandType . Text ;
128134 command . Parameters . AddRange ( parameters ) ;
129-
130- var dt = new DataTable ( ) ;
131- using ( var oda = new MySqlDataAdapter ( command ) )
132- {
133- oda . Fill ( dt ) ;
134- }
135-
136135 var res = new List < T > ( ) ;
137-
138- foreach ( DataRow row in dt . Rows )
136+ using ( var reader = await command . ExecuteReaderAsync ( ) . ConfigureAwait ( false ) )
139137 {
140- T item = new T ( ) ;
141- foreach ( var c in item . DBColumns )
142- item . SetValue ( c . Name , row [ c . Name ] ) ;
143- res . Add ( item ) ;
138+ while ( await reader . ReadAsync ( ) . ConfigureAwait ( false ) )
139+ {
140+ T item = new T ( ) ;
141+ for ( int i = 0 ; i < reader . FieldCount ; i ++ )
142+ {
143+ var name = reader . GetName ( i ) ;
144+ var column = item . DBColumns . FirstOrDefault ( c => c . Name . Equals ( name , StringComparison . OrdinalIgnoreCase ) ) ;
145+ if ( column != null )
146+ {
147+ item . SetValue ( column . Name , reader . IsDBNull ( i ) ? null : reader . GetValue ( i ) ) ;
148+ }
149+ }
150+ res . Add ( item ) ;
151+ }
144152 }
145153
146154 return res . ToArray ( ) ;
0 commit comments