@@ -135,6 +135,38 @@ private static List<string> PrepareQueryString(ref string query, int parameterCo
135135 return dynamicParams ;
136136 }
137137
138+ private static List < string > PrepareCommandParameters ( SqliteCommand command , ref string query , int parameterCount )
139+ {
140+ var parameterNames = PrepareQueryString ( ref query , parameterCount ) ;
141+
142+ command . CommandText = query ;
143+
144+ foreach ( var paramName in parameterNames )
145+ {
146+ var parameter = command . CreateParameter ( ) ;
147+ parameter . ParameterName = paramName ;
148+ command . Parameters . Add ( parameter ) ;
149+ }
150+
151+ return parameterNames ;
152+ }
153+
154+ private static void PrepareCommand ( SqliteCommand command , ref string query , object ? [ ] ? parameters )
155+ {
156+ int parameterCount = parameters ? . Length ?? 0 ;
157+ var parameterNames = PrepareCommandParameters ( command , ref query , parameterCount ) ;
158+
159+ if ( parameters != null )
160+ {
161+ for ( int i = 0 ; i < parameters . Length ; i ++ )
162+ {
163+ command . Parameters [ i ] . Value = parameters [ i ] ?? DBNull . Value ;
164+ }
165+ }
166+
167+ command . CommandText = query ;
168+ }
169+
138170 private static List < DynamicParameters > ? PrepareQuery ( ref string query , object ? [ ] [ ] ? parameters )
139171 {
140172 if ( parameters == null || parameters . Length == 0 )
@@ -206,19 +238,18 @@ public Task<dynamic> Get(string query, object?[]? parameters = null)
206238 return Task . Run ( ( ) => Db . QueryFirstAsync ( query , dynamicParams , commandType : CommandType . Text ) ) ;
207239 }
208240
209- public Task < NonQueryResult > Execute ( string query , object ? [ ] ? parameters = null )
241+ public Task < NonQueryResult > Execute ( string query , object ? [ ] ? parameters = null ) => Task . Run ( ( ) =>
210242 {
211- DynamicParameters ? dynamicParams = PrepareQuery ( ref query , parameters ) ;
212- return Task . Run ( async ( ) =>
243+ using var command = Db . CreateCommand ( ) ;
244+ PrepareCommand ( command , ref query , parameters ) ;
245+
246+ int rowsAffected = command . ExecuteNonQuery ( ) ;
247+ return new NonQueryResult
213248 {
214- int rowsAffected = await Db . ExecuteAsync ( query , dynamicParams , commandType : CommandType . Text ) ;
215- return new NonQueryResult
216- {
217- InsertId = raw . sqlite3_last_insert_rowid ( Db . Handle ) ,
218- RowsAffected = rowsAffected ,
219- } ;
220- } ) ;
221- }
249+ InsertId = raw . sqlite3_last_insert_rowid ( Db . Handle ) ,
250+ RowsAffected = rowsAffected ,
251+ } ;
252+ } ) ;
222253
223254 public Task < NonQueryResult > ExecuteBatch ( string query , object ? [ ] [ ] ? parameters = null )
224255 {
@@ -227,19 +258,36 @@ public Task<NonQueryResult> ExecuteBatch(string query, object?[][]? parameters =
227258 return Task . FromResult ( new NonQueryResult { RowsAffected = 0 } ) ;
228259 }
229260
230- List < DynamicParameters > ? dynamicParamsList = PrepareQuery ( ref query , parameters ) ;
231- if ( dynamicParamsList == null )
261+ int parameterCount = parameters [ 0 ] . Length ;
262+ if ( parameterCount == 0 )
232263 {
233264 return Task . FromResult ( new NonQueryResult { RowsAffected = 0 } ) ;
234265 }
235266
236- return Task . Run ( async ( ) =>
267+ return Task . Run ( ( ) =>
237268 {
238- int rowsAffected = await Db . ExecuteAsync ( query , dynamicParamsList , commandType : CommandType . Text ) ;
269+ int totalRowsAffected = 0 ;
270+
271+ using var command = Db . CreateCommand ( ) ;
272+ PrepareCommandParameters ( command , ref query , parameterCount ) ;
273+
274+ foreach ( var paramSet in parameters )
275+ {
276+ if ( paramSet != null )
277+ {
278+ for ( int i = 0 ; i < paramSet . Length ; i ++ )
279+ {
280+ command . Parameters [ i ] . Value = paramSet [ i ] ?? DBNull . Value ;
281+ }
282+ }
283+
284+ totalRowsAffected += command . ExecuteNonQuery ( ) ;
285+ }
286+
239287 return new NonQueryResult
240288 {
241289 InsertId = raw . sqlite3_last_insert_rowid ( Db . Handle ) ,
242- RowsAffected = rowsAffected ,
290+ RowsAffected = totalRowsAffected ,
243291 } ;
244292 } ) ;
245293 }
0 commit comments