Chapter 4. Application development with C/C++ 
155
break;
case 3:query_product();
break;
case 4:return 0;
default : printf(" Error: Option not recognized\n");
break;
}
printf ("\n");
}
}
void add_product(void){…}
void update_product(void){…}
void query_product(void){…}
Dynamic embedded SQL is used to update information about a product. The 
user can choose to update the quantity or location of a particular product. The 
application will prompt the user to specify which piece of information about a 
product they wish to update. The complete SQL statement will not be known at 
precompile time because the column of the table (either QUANTITY or 
LOCATION) to be updated is not known. The column of the table to be updated 
will only be known at runtime once the user supplies the data. Only at that time 
can the SQL statement be built and submitted to the database for processing.
Static embedded SQL is used in adding a new product and querying for 
information about a product, because the complete SQL statement will exist at 
precompile time.
The system will provide a menu of basic inventory operations to the user, and 
look like Example 4-5.
Example 4-5   Menu of inventory operations
-------------------------------------------------
SIMPLE INVENTORY MANAGEMENT SYSTEM
1. Add New Product
2. Update Product Info (Quantity or Location)
3. Query Product
4. Exit
Enter option: 
Pdf thumbnail preview - Draw thumbnail images for PDF in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Thumbnail Generation with Various Options for Quick PDF Navigation
enable thumbnail preview for pdf files; can't see pdf thumbnails
Pdf thumbnail preview - VB.NET PDF Thumbnail Create SDK: Draw thumbnail images for PDF in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Thumbnail Generation with Various Options for Quick PDF Navigation
create pdf thumbnail image; show pdf thumbnails in
156
DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
4.3.4  Host variable declarations
Host variables used in static SQL statements are declared in a DECLARE 
SECTION. For example, let us declare the static host variables needed for our 
program, see Example 4-6.
Example 4-6   Host variable declarations
EXEC SQL BEGIN DECLARE SECTION;
char PID[11];
sqlint32 quantity;
char location[129];
EXEC SQL END DECLARE SECTION;
The EXEC SQL portion of the declaration is needed to indicate the beginning of 
an embedded SQL statement and must be terminated by a semicolon. The 
normal form is:
EXEC SQL <Standard SQL statement>;
In the INVENTORY table in the SAMPLE database, the PID and LOCATION columns are 
of type VARCHAR(10) and VARCHAR(128), respectively. In the above 
declaration, we have defined the size of those columns to be of one more 
character to take into account the null terminator. This will ensure that returned 
data values from the database do not get truncated. It is permissible to have 
more than one DECLARE section in a source file, although all host variables 
declared must be distinct within the source file.
After declaring the host variables, we have the option of using them as input or 
output variables in an SQL statement. Example 4-7 shows the permissible usage 
of host variables within an SQL statement.
Example 4-7   SQL Statement with both input and output host variables
SELECT quantity, location into :quantity, :location from inventory 
where PID=:PID;
The input host variable for the above statement is PID and a value for it will be 
supplied to the database by the application. The output host variables are 
QUANTITY and LOCATION, and its data values will be returned from the 
database to the application. In both cases, a colon (:) must precede the host 
variable name.
How to C#: Preview Document Content Using XDoc.Word
With the SDK, you can preview the document content according to the preview thumbnail by the ways as following. C# DLLs for Word File Preview. Add references:
view pdf image thumbnail; enable pdf thumbnails in
How to C#: Preview Document Content Using XDoc.PowerPoint
With the SDK, you can preview the document content according to the preview thumbnail by the ways as following. C# DLLs: Preview PowerPoint Document.
pdf thumbnails; pdf files thumbnails
Chapter 4. Application development with C/C++ 
157
4.3.5  Using db2bfd to display host variable declarations
If a bind file is created during precompile time, we can use a DB2 bind file 
description tool named db2bfd to look at the contents of the bind file. This may be 
useful for debugging and can display information such as SQL statements or 
host variables declared. Table 4-3 lists the db2bfd command options.
Table 4-3   db2bfd command options
For example, let us precompile the source file and add the option to create a bind 
file by running the command:
db2 prep inventory.sqc bindfile
This will produce a bind file named inventory.bnd.
Running the command db2bfd -v inventory.bnd provides CLP output as shown 
in Example 4-8.
Example 4-8   db2bfd sample output
inventory.bnd: Host Variables = 3
Type SQL Data Type      Length Alias  Name_Len Name            UDT Name
---- --------------     ------ ------ -------- --------------- 
---------------
460 C STRING               11 H00001        3 PID
496 INTEGER                 4 H00002        8 quantity
460 C STRING              128 H00003        8 location
4.3.6  Using db2dclgn to generate host variable declarations 
DB2 can simplify development by automatically generating host variable 
declarations for a specified database table. 
In Example 4-9 on page 158, the command will generate an
.h 
output file with the 
same name as the table. It will contain the host variable declarations.
db2bfd option
Information
-s
SQL statements
-b
Bind file header
-v 
Host variables declared
-h
Help 
How to C#: Set Image Thumbnail in C#.NET
VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel, VB.NET PowerPoint, VB How to C#: Set Image Thumbnail in C#.NET. To Preview Images in WinForm Application.
show pdf thumbnails; print pdf thumbnails
How to C#: Preview Document Content Using XDoc.excel
document in memory. With the SDK, you can preview the document content according to the preview thumbnail by the ways as following.
create pdf thumbnail image; pdf first page thumbnail
158
DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
Example 4-9   db2dclgn example
db2dclgn -d sample -t inventory
inventory.h:
struct
{
struct
{
short length;
char  data[10];
} pid;
sqlint32 quantity;
struct
{
short length;
char  data[128];
} location;
} inventory;
4.3.7  Connecting to a database
Let us connect to the database within the application and start implementing the 
operations in our application. To connect to the database, we use the CONNECT 
TO statement. We add the following SQL statement into the main function of our 
program.
EXEC SQL CONNECT TO sample;
Alternatively, we can choose to connect to the database using a particular user 
ID and password: 
EXEC SQL CONNECT TO sample USER :uid USING :pwd;
If this method is chosen, host variables for the user ID and password need to be 
declared for use in the CONNECT statement. In our simple inventory application, 
we just connect to the SAMPLE database using the default user ID. 
4.3.8  Disconnecting from a database
To disconnect from the database, we can add the following statement at the end 
of our program.
EXEC SQL CONNECT RESET;
How to C#: Generate Thumbnail for Word
Preview Document. Conversion. Convert Word to PDF. Convert Word Convert Word to ODT. Convert PDF to Word. Text Search. Insert Image. Thumbnail Create. Thumbnail Create
pdf thumbnail preview; create thumbnail from pdf c#
How to C#: Generate Thumbnail for PowerPoint
Preview Document. Conversion. Convert PowerPoint to PDF. Convert PowerPoint to Pages. Annotate PowerPoint. Text Search. Insert Image. Thumbnail Create.
pdf thumbnail generator; enable thumbnail preview for pdf files
Chapter 4. Application development with C/C++ 
159
4.3.9  The SQL Communications Area (SQLCA)
The 
SQL Communications Area
(SQLCA) is a DB2 data structure useful in 
obtaining information pertaining to the processing of an SQL statement or an API 
call. 
As the SQLCA is updated by the database manager after each SQL statement, it 
is important we examine the structure to ensure that any unexpected errors will 
be handled by the application.
The SQLCA structure provides important information such as:
 SQLCODE:
This is an integer return code indicating whether the most recent SQL 
statement processed was successful or not. The value is 0 if successful, 100 
if a query yields no results, positive if a warning occurred, and negative if the 
processing was unsuccessful and an error was returned. 
 SQLSTATE:
This is a five digit character length field that contains a return code from the 
last SQL statement processed. The return code is consistent with the SQL 
Standard.
 SQLERRD:
This is an integer array containing six pieces of information related to the last 
SQL statement processed that can be useful when an error occurs. 
To define the SQLCA, we can add the following statement to our program:
EXEC SQL INCLUDE SQLCA;
Alternatively, we can include the SQLCA header file and use it to declare an 
application variable:
#include <sqlca.h>
struct sqlca mySqlca;
If we had additional source files, we can add the following lines to the other 
source files:
#include <sqlca.h>
extern struct sqlca sqlca
C# Image: View & Operate Web Page Using .NET Doc Image Web Viewer
Support multiple document and image formats, like PDF and TIFF; Thumbnail images order of source document file using mouse dragging in thumbnail preview section;
enable pdf thumbnails; can't see pdf thumbnails
How to C#: Generate Thumbnail for Excel
Preview Document. Conversion. Convert Excel to PDF. Convert Excel to Insert Image. Thumbnail Create. Thumbnail Create. |. Home ›› XDoc.Excel ›› C# Excel
how to create a thumbnail of a pdf document; generate pdf thumbnails
160
DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
4.3.10  Quick SQLCA example
Let us see a quick example of how we can use the SQLCA to get information 
related to the processing of an SQL statement. Let us connect to the database 
with an incorrect database name using the following statement:
EXEC SQL CONNECT TO sampsle;
Let us also add the following lines in the code to check whether the database 
connection was successful using the SQLCA:
if (sqlca.sqlcode!=0){
printf("Database connection error occurred. 
Sqlcode=%d\n",sqlca.sqlcode);
return;
}
We then precompile, compile, link, and run the program. The following is 
returned by the application:
Database connection error occurred.  Sqlcode=-1013 
For debugging and illustrative purposes, we can check out the fields of the 
SQLCA to see what information is provided. Normally, not all SQLCA fields are 
needed to diagnose an application problem. We print the fields of the SQLCA as 
shown in Example 4-10.
Example 4-10   Code to print the SQLCA fields
printf("sqlcabc: %d\n", sqlca.sqlcabc); // Length of SQLCA
printf("sqlcode: %d\n", sqlca.sqlcode); // SQL Return Code
printf("sqlerrml: %d\n", sqlca.sqlerrml); // Length of sqlerrmc
printf("sqlerrmc: %s\n", sqlca.sqlerrmc); // Message tokens
printf("sqlerrd[0]: %d\n", sqlca.sqlerrd[0]); 
printf("sqlerrd[1]: %d\n", sqlca.sqlerrd[1]); 
printf("sqlerrd[2]: %d\n", sqlca.sqlerrd[2]); 
printf("sqlerrd[3]: %d\n", sqlca.sqlerrd[3]); 
printf("sqlerrd[4]: %d\n", sqlca.sqlerrd[4]); 
printf("sqlerrd[5]: %d\n", sqlca.sqlerrd[5]); 
printf("sqlwarn: %s\n", sqlca.sqlwarn); // Warning indicators
printf("sqlstate: %s\n", sqlca.sqlstate); // Return Code
This produces the output shown in Example 4-11 on page 161.
How to C#: Overview of Using XDoc.PowerPoint
document (ODP). Empower to navigate PowerPoint document content quickly via thumbnail. Able to you want. Create Thumbnail. See this
can't view pdf thumbnails; pdf no thumbnail
How to C#: Overview of Using XDoc.Word
Tell C# users how to: create a new Word file and load Word from pdf; merge, append, and split Word files; insert, delete, move, rotate, copy Create Thumbnail.
pdf thumbnails in; pdf files thumbnail preview
Chapter 4. Application development with C/C++ 
161
Example 4-11   Sample output of values stored in the SQLCA
sqlcaid: SQLCA   ê
sqlcabc: 136
sqlcode: -1013
sqlerrml: 7
sqlerrmc: SAMPSLE
sqlerrd[0]: 0
sqlerrd[1]: 0
sqlerrd[2]: 0
sqlerrd[3]: 0
sqlerrd[4]: 0
sqlerrd[5]: 0
sqlwarn:            42705
sqlstate: 42705
Looking up the SQLCODE and SQLSTATE, we discover that the problem 
resulted because the database manager could not find the database specified in 
the application. 
Alternatively, we can use a DB2 API called sqlaintp defined in sql.h to help get 
more information about the error. This function will return the error text for an 
SQLCODE in the SQLCA. An example of using this function is shown in 
Example 4-12.
Example 4-12   Using the sqlaintp API to get error info
char errText[1000];
….
sqlaintp(errText,999,0,&sqlca);
printf("%s\n",errText);
The function call above retrieves the SQLCODE error message and stores it in a 
buffer named errText. As input to the function, we provide the string buffer, 
which stores the error message (errText), the size of the string buffer (999), the 
maximum width of each line of the message text ('0' means no line breaks 
needed in the text), and the pointer to the SQLCA structure (sqlca).
The function call will generate the following message:
SQL1013N  The database alias name or database name "SAMPSLE" could not 
be found.  SQLSTATE=42705
After all this debugging, it appears the name of the database specified in our 
code was incorrect.  The line needs to be corrected to: 
EXEC SQL CONNECT TO sample;
162
DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
4.3.11  Inserting data
The users of the inventory system in our example need to be able to add a new 
product into the database. The user might have the session shown in 
Example 4-13.
Example 4-13   Sample session adding a product into inventory program
-------------------------------------------------
SIMPLE INVENTORY MANAGEMENT SYSTEM
1. Add New Product
2. Update Product Info (Quantity or Location)
3. Query Product
4. Exit
Enter option: 1
-------------------------------------------------
Add A Product
Enter Product ID : 101-101-10
Enter Quantity   : 50
Enter Location   : Warehouse
Product successfully added.
-------------------------------------------------
When the user chooses the option to add a new product, this will invoke the 
add_product() function within the application. We need to write an INSERT 
statement to add a record to the INVENTORY table using the values supplied by 
the user.
The complete definition of the add_product() function is shown in Example 4-14.
Example 4-14   Complete definition of the add_product() function
void add_product(void)
{
printf("-------------------------------------------------\n");
printf(" Add A Product \n\n");
printf(" Enter Product ID : ");
scanf("%s", &PID);
printf(" Enter Quantity   : ");
scanf("%d", &quantity);
printf(" Enter Location   : ");
scanf("%s", &location);
Chapter 4. Application development with C/C++ 
163
EXEC SQL INSERT INTO inventory (PID, quantity, location) VALUES 
(:PID, :quantity, :location);
if (sqlca.sqlcode!=0) {
if (sqlca.sqlcode == -803)
printf("\n Error: Product already exists in the database.\n");
else
printf("\n Error: Problem occurred when adding a new product.  
Sqlcode: %d Sqlstate: %s\n",sqlca.sqlcode, sqlca.sqlstate);
return;
}
EXEC SQL COMMIT;
printf("\n Product successfully added.");
}
In Example 4-14 on page 162, we prompt the user for information on the product 
to be added and populate the host variables with the supplied values. We then 
use the host variables in the INSERT statement and check whether the 
processing was successful.
Note that we add a COMMIT after the execution of the INSERT. This is because 
when a database connection is initially established, the application starts a 
transaction with any executable SQL statement such as SELECT, INSERT, 
CREATE, GRANT, and so on. Within the transaction, any number of SQL 
statements can be issued. This transaction is considered to be an 
atomic
unit of 
work where either all or none of the changes within a transaction are made. To 
end the transaction, a COMMIT or a ROLLBACK must be issued. Issuing a 
COMMIT will apply all the changes to the database, whereas issuing a 
ROLLBACK cancels any changes to be made to the database.
4.3.12  Retrieving data
There are multiple ways to retrieve data from a database. Depending on whether 
a single row or multiple row result set is returned, this determines whether a 
cursor will be used. A 
cursor
is a mechanism that is used to process each row of 
a result set. 
For example, assume we want to find all the products available at the store in our 
INVENTORY table. Because it is possible that more than one row is returned from 
the query, we use a cursor to retrieve and process the rows. Example 4-15 on 
page 164 shows how to use a cursor.
164
DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
Example 4-15   Using a cursor
EXEC SQL DECLARE c1 CURSOR FOR SELECT PID from inventory where 
location='Store';    
EXEC SQL OPEN c1;
EXEC SQL FETCH c1 INTO :PID;
printf("%s\n",PID);
EXEC SQL CLOSE c1;
EXEC SQL COMMIT;
In Example 4-15, a cursor named c1 is declared to hold a resultset of product 
IDs. To use the cursor, the cursor is opened and data is retrieved into the PID 
host variable. Once we are finished processing the resultset, the cursor should 
be closed and a COMMIT executed to release any resources held.
In the inventory program we are developing, we need to retrieve information 
about a single product. Because products are unique within the INVENTORY 
table, we will only be retrieving one row back from the database (if the product 
exists). This means that instead of a cursor, we can use a SELECT INTO 
statement which will directly populate the host variables. A sample session from 
querying a product is shown in Example 4-16. The complete definition of the 
query_product() function is shown in Example 4-17 on page 165.
Example 4-16   Sample session querying a product in the inventory program
-------------------------------------------------
SIMPLE INVENTORY MANAGEMENT SYSTEM
1. Add New Product
2. Update Product Info (Quantity or Location)
3. Query Product
4. Exit
Enter option: 3
-------------------------------------------------
Query A Product
Enter Product ID : 101-101-10
Found Quantity   : 50
Location   : Warehouse
-------------------------------------------------
Documents you may be interested
Documents you may be interested