@@ -153,25 +153,7 @@ public QueryExecutor(DbExceptionParser dbExceptionParser,
153
153
List < string > ? args = null )
154
154
{
155
155
await conn . OpenAsync ( ) ;
156
- DbCommand cmd = conn . CreateCommand ( ) ;
157
- cmd . CommandType = CommandType . Text ;
158
-
159
- // Add query to send user data from DAB to the underlying database to enable additional security the user might have configured
160
- // at the database level.
161
- string sessionParamsQuery = GetSessionParamsQuery ( httpContext , parameters , dataSourceName ) ;
162
-
163
- cmd . CommandText = sessionParamsQuery + sqltext ;
164
- if ( parameters is not null )
165
- {
166
- foreach ( KeyValuePair < string , DbConnectionParam > parameterEntry in parameters )
167
- {
168
- DbParameter parameter = cmd . CreateParameter ( ) ;
169
- parameter . ParameterName = parameterEntry . Key ;
170
- parameter . Value = parameterEntry . Value . Value ?? DBNull . Value ;
171
- PopulateDbTypeForParameter ( parameterEntry , parameter ) ;
172
- cmd . Parameters . Add ( parameter ) ;
173
- }
174
- }
156
+ DbCommand cmd = PrepareDbCommand ( conn , sqltext , parameters , httpContext , dataSourceName ) ;
175
157
176
158
try
177
159
{
@@ -197,6 +179,45 @@ public QueryExecutor(DbExceptionParser dbExceptionParser,
197
179
}
198
180
}
199
181
182
+ /// <summary>
183
+ /// Prepares a database command for execution.
184
+ /// </summary>
185
+ /// <param name="conn">Connection object used to connect to database.</param>
186
+ /// <param name="sqltext">Sql text to be executed.</param>
187
+ /// <param name="parameters">The parameters used to execute the SQL text.</param>
188
+ /// <param name="httpContext">Current user httpContext.</param>
189
+ /// <param name="dataSourceName">The name of the data source.</param>
190
+ /// <returns>A DbCommand object ready for execution.</returns>
191
+ public virtual DbCommand PrepareDbCommand (
192
+ TConnection conn ,
193
+ string sqltext ,
194
+ IDictionary < string , DbConnectionParam > parameters ,
195
+ HttpContext ? httpContext ,
196
+ string dataSourceName )
197
+ {
198
+ DbCommand cmd = conn . CreateCommand ( ) ;
199
+ cmd . CommandType = CommandType . Text ;
200
+
201
+ // Add query to send user data from DAB to the underlying database to enable additional security the user might have configured
202
+ // at the database level.
203
+ string sessionParamsQuery = GetSessionParamsQuery ( httpContext , parameters , dataSourceName ) ;
204
+
205
+ cmd . CommandText = sessionParamsQuery + sqltext ;
206
+ if ( parameters is not null )
207
+ {
208
+ foreach ( KeyValuePair < string , DbConnectionParam > parameterEntry in parameters )
209
+ {
210
+ DbParameter parameter = cmd . CreateParameter ( ) ;
211
+ parameter . ParameterName = parameterEntry . Key ;
212
+ parameter . Value = parameterEntry . Value . Value ?? DBNull . Value ;
213
+ PopulateDbTypeForParameter ( parameterEntry , parameter ) ;
214
+ cmd . Parameters . Add ( parameter ) ;
215
+ }
216
+ }
217
+
218
+ return cmd ;
219
+ }
220
+
200
221
/// <inheritdoc />
201
222
public virtual string GetSessionParamsQuery ( HttpContext ? httpContext , IDictionary < string , DbConnectionParam > parameters , string dataSourceName = "" )
202
223
{
0 commit comments