asp.net pdf viewer control c# : View pdf image thumbnail control application system azure html .net console sg24730119-part1652

Chapter 4. Application development with C/C++ 
175
Alternatively, we can include the SQLDA include file and declare an application 
variable to make use of the structure:
#include <sqlda.h>
struct sqlda *mysqlda;
Once we define the SQLDA structure, we can use it within SQL statements to 
store input or output information as needed. For example, we can use it within a 
prepare statement where <sqlstatement> is a variable storing a dynamic SQL 
statement:
EXEC SQL PREPARE stmt INTO :*mySqlda FROM <sqlstatement>;
The above statement will prepare and store information into the SQLDA structure 
about the dynamic SQL statement specified in the statement. This is equivalent 
to the following two statements:
EXEC SQL PREPARE stmt FROM <sqlstatement>;
EXEC DESCRIBE stmt INTO :*mySqlda;
Note that the example above only describes the output rows of a resultset or in 
the case of a stored procedure CALL, the INOUT and OUT arguments. To get 
information about input parameter markers, you need to add an INPUT INTO 
:*myInputSQLDA clause.
Let us try an example and see what is stored in the SQLDA. We include the 
sqlca.h header file, declare the mysqlda variable in our code, and define the 
variables in Example 4-24.
Example 4-25   Setting up the SQLDA
char test[40];
mysqlda=(struct sqlda*) malloc(SQLDASIZE(2));
mysqlda->sqln=2;
In Example 4-25, we define a buffer named test to store the SQL string that we 
will be working with. Also, we allocate an SQLDA structure, which will hold two 
SQLVAR elements by using the SQLDASIZE macro, and as required, set a field 
named sqln which stores the number of SQLVAR elements needed. We defined 
2 SQLVAR structures to be used for our application because we will be working 
with at most two table columns.
Next, we assign test to hold our SQL statement. We will be querying for the 
product ID (PID) field from the INVENTORY table. We prepare the statement, 
using the SQLDA to hold information about the column being returned, and 
subsequently print fields of the SQLDA structure.
View pdf image thumbnail - Draw thumbnail images for PDF in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Thumbnail Generation with Various Options for Quick PDF Navigation
pdf thumbnail html; pdf thumbnails
View pdf image thumbnail - 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
pdf thumbnail fix; create thumbnail jpeg from pdf
176
DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
Example 4-26   Printing SQLDA Fields
strncpy (test,"SELECT PID FROM inventory", sizeof(test));
/***********************************************
Call PREPARE INTO to prepare and describe the SQL statement.  The 
statement is equivalent to :
EXEC SQL PREPARE stmt INTO :*mysqlda FROM :test;
EXEC SQL EXECUTE stmt USING DESCRIPTOR :*mysqlda;
*************************************************/
EXEC SQL PREPARE stmt INTO :*mysqlda FROM :test;
printf("Number of columns(sqld)= %d\n", mysqlda->sqld); 
printf("Number of SQLVARs(sqln)= %d\n", mysqlda->sqln);
printf("Column name (sqlname.data)= %s\n", 
mysqlda->sqlvar[0].sqlname.data); 
printf("Column name length (sqlname.length)= %d\n", 
mysqlda->sqlvar[0].sqlname.length); 
printf("Column datatype (sqltype)= %d\n", mysqlda->sqlvar[0].sqltype); 
printf("Column length (sqllen)= %d\n", mysqlda->sqlvar[0].sqllen); 
Running this produces the following output.
Example 4-27   Sample output of values stored in the SQLDA
Number of columns(sqld)= 1
Number of SQLVARs(sqln)= 2
Column name (sqlname.data)= PID
Column name length (sqlname.length)= 3
Column datatype (sqltype)= 448
Column length (sqllen)= 10
The result in Example 4-27 informs us that there are two SQLVAR elements 
defined (sqln), and one column in the resultset returned (sqld). The name of the 
column (sqlname.data) is PID which is of length (sqlname.length) 10 and of type 
(sqltype) SQL_VARCHAR (448).
Although we defined two SQLVAR elements, we only really needed one 
SQLVAR element because there is only one column returned by the SQL 
statement. In the PREPARE of a SELECT statement, ideally the number of 
SQLVAR elements defined should be equal to the number of columns expected 
from the result set. If more SQLVARs are defined than is needed, more memory 
How to C#: Set Image Thumbnail in C#.NET
VB.NET How-to, VB.NET PDF, VB.NET Word, VB.NET Excel NET Twain, VB.NET Barcode Read, VB.NET Barcode Generator, view less. How to C#: Set Image Thumbnail in C#.NET
generate pdf thumbnails; pdf files thumbnails
VB.NET Image: Program for Creating Thumbnail from Documents and
language. It empowers VB developers to create thumbnail from multiple document and image formats, such as PDF, TIFF, GIF, BMP, etc. It
create thumbnail from pdf; how to show pdf thumbnails in
Chapter 4. Application development with C/C++ 
177
would be unnecessarily used. If fewer SQLVARs are defined, there will not be 
enough SQLVAR elements to describe all the columns being returned.  
4.4  Building a C/C++ application using CLI
In this section, we show you the fundamentals of building a C/C++ application 
using CLI. We discuss first some basic concepts and the environment setup. We 
then guide you step-by-step to build an application starting from a simple code 
template.
4.4.1  CLI handles
A Call Level Interface (CLI) application needs to initially set up data structures 
and variables to manage work such as connecting to the database, running SQL 
statements, and disconnecting from the database. Luckily, data objects called 
handles
exist to make things easier. Handles can be allocated, used for 
processing, and then freed. The possible CLI handles are:
 Environment (SQL_HANDLE_ENV)
This object is the base handle, which holds iholds information and provides a 
context for all connections. Typically, only a single environment handle exists 
for an application.
 Connection (SQL_HANDLE_DBC)
This object holds information about a connection to a single database and 
provides a context for all statements executed against that database. A CLI 
application can connect to multiple databases. This means that there can be 
multiple connection handles associated with a single environment handle.
 Statement (SQL_HANDLE_STMT)
This object contains information about the processing of an SQL statement. 
This must be associated with a connection handle.
 Descriptor (SQL_HANDLE_DESC)
This handle holds information about either parameter markers or columns in a 
resultset. It can be associated with either a statement or connection handle.
Figure 4-1 on page 178 illustrates the relationship of the handles. Connection 
handles can only be defined under the context of an environment handle, and 
statement handles can only be defined under the context of a connection handle. 
Descriptor handles can be optionally allocated to associate with a connection or 
statement handle. Handle allocation is done in sequence. The environment 
handle must be declared first, then the connection handle is declared under the 
environment handle, and then the statement handle is declared under the 
How to C#: Generate Thumbnail for Raster
VB.NET How-to, VB.NET PDF, VB.NET Word, VB Twain, VB.NET Barcode Read, VB.NET Barcode Generator, view less. You can navigate through Rater Image in your C#.NET
generate pdf thumbnail c#; enable pdf thumbnails in
How to C#: Generate Thumbnail for Word
C#.NET PDF Windows Viewer, C#.NET convert image to PDF VB.NET How-to, VB.NET PDF, VB.NET Word, VB Twain, VB.NET Barcode Read, VB.NET Barcode Generator, view less.
view pdf thumbnails in; pdf thumbnails in
178
DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
connection handle. When freeing the handles, all child handles should be freed 
explicitly before freeing the parent handle.
Figure 4-1   CLI handles
4.4.2  The CLI driver
In order for us to use Call Level Interface (CLI) APIs, we need to make use of the 
CLI driver available in DB2. The name of the library specific to each platform is:
 On Windows: db2cli.dll (for dynamic loading) or db2cli.lib (for static linking)
 Linux: libdb2.a (for either dynamic loading at runtime or static linking at 
compile time)
In this book, we discuss the basic programming features available in the CLI 
interface. 
4.4.3  The CLI configuration file (db2cli.ini)
If we ever need to change the default behavior of CLI, we can change the 
db2cli.ini configuration file by adding or modifying CLI keywords. This file is read 
by the CLI driver during runtime, and is either located in the directory specified by 
the DB2 environment registry setting DB2CLIINIPATH (if set by the user) or in 
the following directories.
Descriptor
Descriptor
Allocatio
n O
rder
Descriptor
Environment
Handle
Statement
Statement
Statement
Connection
Connection
Descriptor
Descriptor
(
F
r
e
e
)
O
r
d
e
De-Allocation
H
a
n
d
le
How to C#: Generate Thumbnail for PowerPoint
C#.NET PDF Windows Viewer, C#.NET convert image to PDF VB.NET How-to, VB.NET PDF, VB.NET Word, VB Twain, VB.NET Barcode Read, VB.NET Barcode Generator, view less.
disable pdf thumbnails; how to make a thumbnail from pdf
How to C#: Overview of Using XImage.Raster
You may easily generate thumbnail image from image file. Annotate XImage page. You may easily generate thumbnail image from image file.
thumbnail view in for pdf files; view pdf thumbnails
Chapter 4. Application development with C/C++ 
179
Table 4-4   Locations of the db2cli.ini file
An example of the contents of a db2cli.ini file is found in Example 4-28.
Example 4-28   Sample db2cli.ini file contents
; Comment lines start with a semi-colon.
[tstcli1x]
uid=userid
pwd=password
autocommit=0
TableType="'TABLE','VIEW','SYSTEM TABLE'"
[tstcli2x]
; Assuming dbalias2 is a database in DB2 for MVS.
SchemaList="'OWNER1','OWNER2',CURRENT SQLID"
[MyVeryLongDBALIASName]
dbalias=dbalias3
SysSchema=MYSCHEMA
[testDB]
autocommit=0
In a db2cli.ini file, the name of a database is surrounded by square brackets. 
Each database in the file will have its own section of CLI keywords, which are 
listed below the database name. If a database is not listed in the db2cli.ini file, 
this means that there are no CLI keywords associated with it. Comments are 
denoted by semicolons (;). In Example 4-28, we see that there is a database 
named testDB with one CLI keyword named autocommit.  
If we want a CLI keyword to apply to all databases, instead of defining the 
keyword in each database section, we can use a common section. A common 
section (denoted by “[common]”) in the configuration file means that the CLI 
driver will read the CLI keyword during runtime for all databases it accesses.
We can choose to modify the db2cli.ini manually or on the DB2 Command Line 
Processor (CLP). To list the entire contents of the db2cli.ini file on the CLP, we 
can run the command:
db2 get cli cfg
Windows
Sqllib in the DB2 installation path
Linux
sqllib/cfg of the instance owner
RasterEdge XImage.Raster for .NET - SDK for Raster Image Document
Able to view and edit image rapidly. Advanced image save option. HTML5 Viewer for .NET; XDoc.Windows Viewer for .NET; XDoc.Converter for .NET; XDoc.PDF for .NET;
create thumbnail from pdf c#; create thumbnail jpg from pdf
VB.NET Image: Image and Doc Windows, Web & Mobile Viewers of
a compatible mobile phone or tablet to view, navigate, zoom are JPEG, PNG, BMP, GIF, TIFF, PDF, Word and VB.NET Image Viewing SDK - Features and Techs. Easy to
generate thumbnail from pdf; can't view pdf thumbnails
180
DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
To only get CLI keywords applicable for a particular database, we can run the 
following command (where <database name> is the name of the database):
db2 get cli cfg for section <database name>
To add or update a CLI keyword for a particular database, we can run the 
following command (substituting for the actual database name, CLI keyword, and 
value):
db2 update cli cfg for section <database name> using <CLI keyword> 
<value>
If a section for a database does not already exist and we use the UPDATE CLI CFG 
command, a section will be automatically added to the configuration file. An 
example of adding a CLI keyword to the db2cli.ini file on the CLP for the 
SAMPLE database is:
db2 update cli cfg for section sample using autocommit 0
Refer to the DB2 UDB Call Level Interface Guide & Reference, SC10-4224, for a 
list of all supported CLI keywords.
4.4.4  Setting up the CLI Environment
In addition to setting up the C/C++ development environment as outlined in 4.1.1, 
“C/C++ development environment setup” on page 148, programs written using 
CLI need to ensure that the necessary CLI packages exist on the database 
server.
The CLI driver will communicate with the application and the database to process 
SQL statements. Precompile and bind steps are not required for CLI 
applications. This means that no application packages are created in the 
database. However, for an SQL statement to be executed, there still needs to be 
a package with available sections in the database for access plans. This is where 
CLI bind files come in. CLI bind files are supplied by DB2 and only have to be 
bound against the database once. Once bound, CLI dynamic placeholder 
packages will exist in the database. These packages are ready to handle the 
dynamic SQL passed by the driver. 
DB2 supplies text files listing the required bind files to be bound against a 
particular database server platform. Table 4-5 on page 181 outlines the list files 
specific to each database server platform. They are available in the BND 
directory of the DB2 installation path.
Chapter 4. Application development with C/C++ 
181
Table 4-5   DB2 list files for CLI
To bind the packages, you need to connect to the database server and run the 
BIND command to process the appropriate .lst file.
For example, within a DB2 UDB CLP window on a Windows machine, suppose 
we want to bind the CLI packages against a DB2 database on a Linux machine. 
Example 4-29 shows the commands we execute to create the CLI and DB2 utility 
packages in the SAMPLE database.
Example 4-29   Binding CLI bind files
db2 connect to sample
db2 bind C:\Program Files\IBM\SQLLIB\bnd\@db2ubind.lst sqlerror 
continue grant public
db2 bind C:\Program Files\IBM\SQLLIB\bnd @db2cli.lst sqlerror continue 
grant public
db2 terminate
In the example above, you might notice that an at character, (@), is added in 
front of the list filename. This is needed for the DB2 binder to properly process 
each bind file listed in the list file.
Server platform
Needed .lst files for CLI
DB2 UDB (Windows, UNIX)
db2cli.lst, db2ubind.lst
DB2 for z/OS® and OS/390®
ddcsmvs.lst
DB2 for VM
ddcsvm.lst
DB2 for VSE
ddcsvse.lst
DB2 for AS/400® and iSeries™
ddcs400.lst
182
DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
4.4.5  Overview of steps
The steps to build a C/C++ application using CLI are as follows:
1. Allocate an environment handle.
2. Allocate one or more connection handles to be associated with the single 
environment handle allocated in step 1.
3. With a connection handle allocated in Step 2, perform a database connection. 
Allocate one or more statement handles under the connection handle to do 
SQL processing against the database.
4. Repeat step 3 if there are multiple connection handles.
5. Clean up resources by ensuring all database connections are disconnected 
and all handles are freed before the application terminates.
4.5  A simple C inventory program using CLI
To illustrate the basic fundamentals of building a C/C++ application using the CLI 
interface, let us develop a simple program and work with the INVENTORY table in 
the SAMPLE database again. This application will print a list of products, which are 
low in quantity, see Example 4-30. The user must supply the minimum 
acceptable quantity value. Any products with quantity less than the acceptable 
value need to be restocked. 
Example 4-30   Sample output of CLI program
CLIinventory 50
Products to Restock (less than 50)
-------------------------------------
      100-100-01
25      100-101-01
In the above run, the user tells the application that we need a list of all products, 
which have a quantity of less than 50. The application returns a list of two items 
in the database satisfying this requirement.
Chapter 4. Application development with C/C++ 
183
4.5.1  CLI header files
To begin a CLI program, we need to ensure one of the following header files is 
included:
 sqlcli.h - Contains CLI constants, function prototypes and data structures
 sqlcli1.h - Contains everything in sqlcli.h as well as SQL extensions in sqlext.h
4.5.2  Allocating handles
There are various CLI APIs we can use to allocate different types of handles. 
Refer to DB2 documentation for the syntax of each API. In Table 4-6, we list the 
APIs.
Table 4-6   APIs to allocate handles
We use SQLAllocHandle in our sample CLI application. 
This is the syntax of the function, as outlined in the DB2 documentation:
SQLRETURN   SQLAllocHandle (
SQLSMALLINT       HandleType,         /* fHandleType */
SQLHANDLE         InputHandle,        /* hInput */
SQLHANDLE         *OutputHandlePtr);  /* *phOutput */ 
In the above syntax, HandleType is the type of handle, InputHandle is the 
context for the new handle, and OutputHandlePtr is a buffer storing the newly 
allocated handle data structure.
To begin the application, we need to define and allocate an environment and 
connection handle. Example 4-31 on page 184 illustrates how to do this. We 
declare two variables to store the data structure of the handles and then call the 
SQLAllocHandle() API. When environment handles are allocated, there is no 
CLI API
Purpose
SQLAllocEnv
Get an environment handle.
SQLAllocConnect
Get a connection handle.
SQLAllocHandle
Get a handle.
SQLAllocStmt
Get a statement handle.
Note: SQLAllocEnv(), SQLAllocConnect(), and SQLAllocStmt() are all ODBC 
2.0 APIs and are deprecated. These APIs should be replaced by 
SQLAllocHandle.
184
DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
context for that handle type, so we use SQL_NULL_HANDLE as the context. 
When connection handles are allocated, they need to be under the context of an 
environment handle.
Example 4-31   Using SQLAllocHandle()
SQLHANDLE env_handle;
SQLHANDLE conn_handle;
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env_handle);
SQLAllocHandle(SQL_HANDLE_DBC, env_handle, &conn_handle);
4.5.3  Freeing handles
At the end of an application, we need to ensure we free the resources associated 
with each handle. There are various CLI APIs we can use to free up the different 
types of handles. In Table 4-7, we list the APIs.
Table 4-7   APIs to free handles
Generally, we can use the SQLFreeHandle() API to free environment, 
connection, and statement handles. We use SQLFreeHandle() API in our sample 
CLI application. To end our sample application, we need to free the connection 
and environment handles. We show how to do this with the SQLFreeHandle() 
API, giving a handle type and handle for each call in Example 4-32.
Example 4-32   Using SQLFreeHandle()
SQLFreeHandle(SQL_HANDLE_DBC,conn_handle);
SQLFreeHandle(SQL_HANDLE_ENV,env_handle);
CLI API
Purpose
SQLFreeEnv
Free an environment handle.
SQLFreeConnect
Free a connection handle.
SQLFreeStmt
Free a statement handle.
SQLFreeHandle
Free a handle.
Note: SQLFreeEnv(), SQLFreeConnect(), and SQLFreeStmt(SQL_DROP) 
are deprecated. SQLFreeHandle() should be used to free environment, 
connection, and statement handles.
Documents you may be interested
Documents you may be interested