# vexecuteQuery

> Execute an SQL `select` statement with a `va_list` argument containing a list of parameters or an array of Value parameters.

> ### For an overview see page McoSqlEngine

> ### Prototypes

>         ResultSet* SqlEngine::vexecuteQuery(char const* sql, va_list* list);

>         ResultSet* SqlEngine::vexecuteQuery(char const* sql, Value** params);

>         ResultSet* SqlEngine::vexecuteQuery(char const* sql, Value** params, size_t nParams);

>         ResultSet* SqlEngine::vexecuteQuery(Transaction* trans, char const* sql, va_list* list);

>         ResultSet* SqlEngine::vexecuteQuery(Transaction* trans, char const* sql, Value** params);

>         ResultSet* SqlEngine::vexecuteQuery(Transaction* trans, char const* sql, Value** params, size_t nParams);

> ### Arguments

> trans | A Transaction instance. When passed, no implicit database transaction is started or committed. When absent, the SQL `select` statement is executed within an implicit database transaction.
> sql | A string containing an SQL `select` statement with possible parameters to be substituted from the variable list
> list | A `va_list` argument containing a list of parameters to be substituted into the `sql` string
> params | A pointer to one or an array of Value parameters
> nParams | An integer value specifying the number of Value objects in array `params`, or -1 if the number is unknown

> ### Description

> These methods execute an SQL `select` statement with a variable list of parameters. (See page Parameter Substitution Format Specifiers). It returns a QueryResult containing the set of table rows that satisfy the query. The first three versions of `vexecuteQuery()` start an implicit read-only database transaction and roll back the transaction when finished. When the second group of three versions of `vexecuteQuery()`, (with the `trans` parameter) are called, the query is executed within the context of this Transaction; the calling application code is responsible for starting and committing or rolling back the Transaction.

> ### Returns

> These methods return a QueryResult or throw a RuntimeException in the case of an error.

> ### Example

>         const char * dbname = "SqlDb";

>         int main(int argc, char* argv[])
>         {
>             McoSqlEngine engine;
>             ...
>             engine.open(db_name,  // database name
>                     SqlDb_get_dictionary(),  // database dictionary
>                     DATABASE_SIZE,  // database size
>                     MEMORY_PAGE_SIZE,  // page size
>                     MAP_ADDRESS); // mapping address for shared memory mode
>             ...
>             Query(trans, "select * from Person where name like %s", "Thomas");
>             ...
>         }

>         void Query(Transaction* trans, const char * sql, ...)
>         {
>             va_list list;

>             va_start(list, sql);
>             QueryResult result(engine.vexecuteQuery(trans, sql, list));
>             va_end(list);
>             ...
>         }