To execute an SQL command you should do the following:
Step 1. | Initialize SQL command text |
Step 2. | Bind input parameters |
Step 3. | Execute the command |
Step 4. | Process output |
In this section we are going to consider commands like INSERT, UPDATE and DELETE that do not involve fetching data. To execute a SELECT command or a result set generating stored procedures see Fetch result set(s) and Call stored procedure tutorials.
In the following example we assume that the table EMPLOYEES(NAME CHAR(25), AGE INTEGER)
exists in the database our connection object is connected to.
Initialize SQL Command Text
To execute a command we need two objects: SAConnection (connection object) and SACommand (command object):
SACommand insert(
&con,
_TSA("INSERT INTO EMPLOYEES (NAME, AGE) VALUES (:1, :2))");
The code above creates a command object insert
based on previously created and connected connection object con
(for initializing con
object see Connect to database). Second parameter is the command text we want to execute. The command text can also be provided using SACommand::setCommandText method:
SACommand insert(&con);
insert.setCommandText(_TSA("INSERT INTO EMPLOYEES (NAME, AGE) VALUES (:1, :2))");
Bind Input Parameters
Binding some values to the command is like filling in the gaps in the SQL command statement (marked by :1
, :2
, :3
, ...) with actual data values. The data values can be constants or program variables of appropriate types. To associate a command object with these bind variables you can use the SACommand::operator << as shown below:
insert << _TSA("Tom Patt") << 30;
The order that you associate the values is important (i.e. the first <<
associates a bind with :1
, the second <<
with :2
).
Another way to bind input variables is directly assigning a value with SAParam object which represents a command parameter. To get appropriated parameter object by its position in SQL statement use SACommand::Param method:
insert.Param(1).setAsString() = _TSA("Tom Patt");
insert.Param(2).setAsInt32() = 30;
For more details about binding input variables see in Bind input parameters section.
Execute the Command
Finally we execute the command, which results in the string being inserted into column NAME
, and the number being inserted into column AGE
:
insert.Execute();
If you want to see the number of rows affected by the command execution use SACommand::RowsAffected method:
int nRows = insert.RowsAffected();
If you want to insert another row of new data, you just have to associate the new bind values with the object and repeat the bind/execute part again:
insert << _TSA("Nick Barry") << 35;
insert.Execute();
Process Output
Processing output parameters and result set is not actual for INSERT, UPDATE and DELETE commands, that's why we discuss this questions in other tutorials:
- For processing result set (if any) see Fetch result set(s)
- For processing output parameters (if any) see Get output parameters