pdf viewer in asp net c# : Add photo to pdf form Library SDK component asp.net .net winforms mvc postgresql-9.4-A485-part3011

Chapter 33. ECPG - Embedded SQL in C
}
33.7.2.3. Passing Query Parameters Using an SQLDA
The general steps to use an SQLDA to pass input parameters to a prepared query are:
1. Create a prepared query (prepared statement)
2. Declare a sqlda_t structure as an input SQLDA.
3. Allocate memory area (as sqlda_t structure) for the input SQLDA.
4. Set (copy) input values in the allocated memory.
5. Open a cursor with specifying the input SQLDA.
Here is an example.
First, create a prepared statement.
EXEC SQL BEGIN DECLARE SECTION;
char query[1024] = "SELECT d.oid,
*
FROM pg_database d, pg_stat_database s WHERE d.oid = s.datid AND (d.datname = ? OR d.oid = ?)";
EXEC SQL END DECLARE SECTION;
EXEC SQL PREPARE stmt1 FROM :query;
Next, allocate memory for an SQLDA, and set the number of input parameters in
sqln
,a member
variable of the
sqlda_t
structure. When two or more input parameters are required for the prepared
query, the application has toallocate additional memory space which is calculated by (nr. of params -
1) * sizeof(sqlvar_t). The example shown here allocates memory space for two input parameters.
sqlda_t
*
sqlda2;
sqlda2 = (sqlda_t
*
) malloc(sizeof(sqlda_t) + sizeof(sqlvar_t));
memset(sqlda2, 0, sizeof(sqlda_t) + sizeof(sqlvar_t));
sqlda2->sqln = 2; /
*
number of input variables
*
/
After memory allocation, store the parameter values into the
sqlvar[]
array. (This is same array
used for retrieving column values when the SQLDA is receiving a result set.) In this example, the
input parameters are
"postgres"
,having a string type, and
1
,having an integer type.
sqlda2->sqlvar[0].sqltype = ECPGt_char;
sqlda2->sqlvar[0].sqldata = "postgres";
sqlda2->sqlvar[0].sqllen
= 8;
int intval = 1;
sqlda2->sqlvar[1].sqltype = ECPGt_int;
sqlda2->sqlvar[1].sqldata = (char
*
) &intval;
sqlda2->sqlvar[1].sqllen
= sizeof(intval);
778
Add photo to pdf form - insert images into PDF in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Sample C# code to add image, picture, logo or digital photo into PDF document page using PDF page editor control
add image to pdf online; add image field to pdf form
Add photo to pdf form - VB.NET PDF insert image library: insert images into PDF in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Guide VB.NET Programmers How to Add Images in PDF Document
how to add a jpg to a pdf; add picture to pdf file
Chapter 33. ECPG - Embedded SQL in C
By opening a cursor and specifying the SQLDA that was set up beforehand, the input parameters are
passed to the prepared statement.
EXEC SQL OPEN cur1 USING DESCRIPTOR sqlda2;
Finally, after using input SQLDAs, the allocatedmemory space must be freed explicitly, unlike SQL-
DAs used for receiving query results.
free(sqlda2);
33.7.2.4. A Sample Application Using SQLDA
Here is an example program, whichdescribes howto fetchaccess statistics of the databases, specified
by the input parameters, from the system catalogs.
This application joins two system tables, pg_database and pg_stat_database on the database OID, and
also fetches and shows the database statistics which are retrieved by two input parameters (a database
postgres
,and OID
1
).
First, declare an SQLDA for input and an SQLDA for output.
EXEC SQL include sqlda.h;
sqlda_t
*
sqlda1; /
*
an output descriptor
*
/
sqlda_t
*
sqlda2; /
*
an input descriptor
*
/
Next, connect to the database, prepare a statement, and declare a cursor for the prepared statement.
int
main(void)
{
EXEC SQL BEGIN DECLARE SECTION;
char query[1024] = "SELECT d.oid,
*
FROM pg_database d, pg_stat_database s WHERE d.oid=s.datid AND ( d.datname=? OR d.oid=? )";
EXEC SQL END DECLARE SECTION;
EXEC SQL CONNECT TO testdb AS con1 USER testuser;
EXEC SQL PREPARE stmt1 FROM :query;
EXEC SQL DECLARE cur1 CURSOR FOR stmt1;
Next, put some values in the input SQLDA for the input parameters. Allocate memory for the input
SQLDA, and set the number of input parameters to
sqln
.Store type, value, and value length into
sqltype
,
sqldata
,and
sqllen
in the
sqlvar
structure.
/
*
Create SQLDA structure for input parameters.
*
/
sqlda2 = (sqlda_t
*
) malloc(sizeof(sqlda_t) + sizeof(sqlvar_t));
memset(sqlda2, 0, sizeof(sqlda_t) + sizeof(sqlvar_t));
sqlda2->sqln = 2; /
*
number of input variables
*
/
sqlda2->sqlvar[0].sqltype = ECPGt_char;
sqlda2->sqlvar[0].sqldata = "postgres";
779
VB.NET Image: Mark Photo, Image & Document with Polygon Annotation
on PDF file without using external PDF editing software. VB.NET Methods to Add Polygon Annotation. In this Public Partial Class Form1 Inherits Form Public Sub
add multiple jpg to pdf; add jpg to pdf form
VB.NET Image: Image Cropping SDK to Cut Out Image, Picture and
VB.NET image cropping method to crop picture / photo; size of created cropped image file, add antique effect Public Partial Class Form1 Inherits Form Public Sub
add photo pdf; add photo to pdf preview
Chapter 33. ECPG - Embedded SQL in C
sqlda2->sqlvar[0].sqllen
= 8;
intval = 1;
sqlda2->sqlvar[1].sqltype = ECPGt_int;
sqlda2->sqlvar[1].sqldata = (char
*
)&intval;
sqlda2->sqlvar[1].sqllen
= sizeof(intval);
After settingup the input SQLDA, open a cursor withthe input SQLDA.
/
*
Open a cursor with input parameters.
*
/
EXEC SQL OPEN cur1 USING DESCRIPTOR sqlda2;
Fetch rows into the output SQLDA from the opened cursor. (Generally, you have to call
FETCH
re-
peatedly in the loop, to fetch all rows in the result set.)
while (1)
{
sqlda_t
*
cur_sqlda;
/
*
Assign descriptor to the cursor
*
/
EXEC SQL FETCH NEXT FROM cur1 INTO DESCRIPTOR sqlda1;
Next, retrieve the fetched records from the SQLDA, by following the linked list of the
sqlda_t
structure.
for (cur_sqlda = sqlda1 ;
cur_sqlda != NULL ;
cur_sqlda = cur_sqlda->desc_next)
{
...
Read each columns in the first record. The number of columns is stored in
sqld
,the actual data of
the first column is stored in
sqlvar[0]
,both members of the
sqlda_t
structure.
/
*
Print every column in a row.
*
/
for (i = 0; i < sqlda1->sqld; i++)
{
sqlvar_t v = sqlda1->sqlvar[i];
char
*
sqldata = v.sqldata;
short sqllen
= v.sqllen;
strncpy(name_buf, v.sqlname.data, v.sqlname.length);
name_buf[v.sqlname.length] = ’\0’;
Now, the column data is stored in the variable
v
.Copy every datum into host variables, looking at
v.sqltype
for the type of the column.
switch (v.sqltype) {
int intval;
double doubleval;
780
VB.NET Image: Image Scaling SDK to Scale Picture / Photo
about this VB.NET image scaling control add-on, we RE__Test Public Partial Class Form1 Inherits Form Public Sub can only scale one image / picture / photo at a
add photo to pdf online; adding images to a pdf document
VB.NET Image: Image Resizer Control SDK to Resize Picture & Photo
VB.NET Image & Photo Resizing Overview. The practical this VB.NET image resizer control add-on, can powerful & profession imaging controls, PDF document, image
add a jpg to a pdf; add image to pdf file acrobat
Chapter 33. ECPG - Embedded SQL in C
unsigned long long int longlongval;
case ECPGt_char:
memset(&var_buf, 0, sizeof(var_buf));
memcpy(&var_buf, sqldata, (sizeof(var_buf) <= sqllen ? sizeof(var_buf)-1 : sqllen));
break;
case ECPGt_int: /
*
integer
*
/
memcpy(&intval, sqldata, sqllen);
snprintf(var_buf, sizeof(var_buf), "%d", intval);
break;
...
default:
...
}
printf("%s = %s (type: %d)\n", name_buf, var_buf, v.sqltype);
}
Close the cursor after processing all of records, and disconnect from the database.
EXEC SQL CLOSE cur1;
EXEC SQL COMMIT;
EXEC SQL DISCONNECT ALL;
The whole program is shown in Example 33-1.
Example 33-1. Example SQLDA Program
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
EXEC SQL include sqlda.h;
sqlda_t
*
sqlda1; /
*
descriptor for output
*
/
sqlda_t
*
sqlda2; /
*
descriptor for input
*
/
EXEC SQL WHENEVER NOT FOUND DO BREAK;
EXEC SQL WHENEVER SQLERROR STOP;
int
main(void)
{
EXEC SQL BEGIN DECLARE SECTION;
char query[1024] = "SELECT d.oid,
*
FROM pg_database d, pg_stat_database s WHERE d.oid=s.datid AND ( d.datname=? OR d.oid=? )";
int intval;
unsigned long long int longlongval;
781
VB.NET Image: How to Save Image & Print Image Using VB.NET
of saving and printing multi-page document files, like PDF and Word printing assembly with VB.NET web image viewer add-on, you VB.NET Code to Save Image / Photo.
add photo to pdf online; add image to pdf reader
C# Image: How to Add Antique & Vintage Effect to Image, Photo
this C#.NET antique effect creating control add-on is widely used in modern photo editors, which powerful & profession imaging controls, PDF document, tiff
add image to pdf; adding image to pdf in preview
Chapter 33. ECPG - Embedded SQL in C
EXEC SQL END DECLARE SECTION;
EXEC SQL CONNECT TO uptimedb AS con1 USER uptime;
EXEC SQL PREPARE stmt1 FROM :query;
EXEC SQL DECLARE cur1 CURSOR FOR stmt1;
/
*
Create a SQLDA structure for an input parameter
*
/
sqlda2 = (sqlda_t
*
)malloc(sizeof(sqlda_t) + sizeof(sqlvar_t));
memset(sqlda2, 0, sizeof(sqlda_t) + sizeof(sqlvar_t));
sqlda2->sqln = 2; /
*
a number of input variables
*
/
sqlda2->sqlvar[0].sqltype = ECPGt_char;
sqlda2->sqlvar[0].sqldata = "postgres";
sqlda2->sqlvar[0].sqllen
= 8;
intval = 1;
sqlda2->sqlvar[1].sqltype = ECPGt_int;
sqlda2->sqlvar[1].sqldata = (char
*
) &intval;
sqlda2->sqlvar[1].sqllen
= sizeof(intval);
/
*
Open a cursor with input parameters.
*
/
EXEC SQL OPEN cur1 USING DESCRIPTOR sqlda2;
while (1)
{
sqlda_t
*
cur_sqlda;
/
*
Assign descriptor to the cursor
*
/
EXEC SQL FETCH NEXT FROM cur1 INTO DESCRIPTOR sqlda1;
for (cur_sqlda = sqlda1 ;
cur_sqlda != NULL ;
cur_sqlda = cur_sqlda->desc_next)
{
int i;
char name_buf[1024];
char var_buf[1024];
/
*
Print every column in a row.
*
/
for (i=0 ; i<cur_sqlda->sqld ; i++)
{
sqlvar_t v = cur_sqlda->sqlvar[i];
char
*
sqldata = v.sqldata;
short sqllen
= v.sqllen;
strncpy(name_buf, v.sqlname.data, v.sqlname.length);
name_buf[v.sqlname.length] = ’\0’;
switch (v.sqltype)
{
case ECPGt_char:
memset(&var_buf, 0, sizeof(var_buf));
memcpy(&var_buf, sqldata, (sizeof(var_buf)<=sqllen ? sizeof(var_buf)-1 : sqllen) );
break;
case ECPGt_int: /
*
integer
*
/
782
VB.NET Image: Tutorial for Flipping Image Using Our .NET Image SDK
version of .NET imaging SDK and add the following becomes a mirror reflection of the photo on the powerful & profession imaging controls, PDF document, tiff
adding a jpeg to a pdf; add an image to a pdf acrobat
C# PDF remove image library: remove, delete images from PDF in C#.
Highlight Text. Add Text. Add Text Box. Drawing vector image, graphic picture, digital photo, scanned signature and remove multiple or all images from PDF document
add photo to pdf file; add picture to pdf form
Chapter 33. ECPG - Embedded SQL in C
memcpy(&intval, sqldata, sqllen);
snprintf(var_buf, sizeof(var_buf), "%d", intval);
break;
case ECPGt_long_long: /
*
bigint
*
/
memcpy(&longlongval, sqldata, sqllen);
snprintf(var_buf, sizeof(var_buf), "%lld", longlongval);
break;
default:
{
int i;
memset(var_buf, 0, sizeof(var_buf));
for (i = 0; i < sqllen; i++)
{
char tmpbuf[16];
snprintf(tmpbuf, sizeof(tmpbuf), "%02x ", (unsigned char) sqldata[i]);
strncat(var_buf, tmpbuf, sizeof(var_buf));
}
}
break;
}
printf("%s = %s (type: %d)\n", name_buf, var_buf, v.sqltype);
}
printf("\n");
}
}
EXEC SQL CLOSE cur1;
EXEC SQL COMMIT;
EXEC SQL DISCONNECT ALL;
return 0;
}
The output of this example should look something like the following (some numbers will vary).
oid = 1 (type: 1)
datname = template1 (type: 1)
datdba = 10 (type: 1)
encoding = 0 (type: 5)
datistemplate = t (type: 1)
datallowconn = t (type: 1)
datconnlimit = -1 (type: 5)
datlastsysoid = 11510 (type: 1)
datfrozenxid = 379 (type: 1)
dattablespace = 1663 (type: 1)
datconfig =
(type: 1)
datacl = {=c/uptime,uptime=CTc/uptime} (type: 1)
datid = 1 (type: 1)
datname = template1 (type: 1)
numbackends = 0 (type: 5)
xact_commit = 113606 (type: 9)
xact_rollback = 0 (type: 9)
blks_read = 130 (type: 9)
783
Chapter 33. ECPG - Embedded SQL in C
blks_hit = 7341714 (type: 9)
tup_returned = 38262679 (type: 9)
tup_fetched = 1836281 (type: 9)
tup_inserted = 0 (type: 9)
tup_updated = 0 (type: 9)
tup_deleted = 0 (type: 9)
oid = 11511 (type: 1)
datname = postgres (type: 1)
datdba = 10 (type: 1)
encoding = 0 (type: 5)
datistemplate = f (type: 1)
datallowconn = t (type: 1)
datconnlimit = -1 (type: 5)
datlastsysoid = 11510 (type: 1)
datfrozenxid = 379 (type: 1)
dattablespace = 1663 (type: 1)
datconfig =
(type: 1)
datacl =
(type: 1)
datid = 11511 (type: 1)
datname = postgres (type: 1)
numbackends = 0 (type: 5)
xact_commit = 221069 (type: 9)
xact_rollback = 18 (type: 9)
blks_read = 1176 (type: 9)
blks_hit = 13943750 (type: 9)
tup_returned = 77410091 (type: 9)
tup_fetched = 3253694 (type: 9)
tup_inserted = 0 (type: 9)
tup_updated = 0 (type: 9)
tup_deleted = 0 (type: 9)
33.8. Error Handling
This section describes how you can handleexceptionalconditions and warnings in anembedded SQL
program. There are two nonexclusive facilities for this.
Callbacks canbe configured to handle warning anderror conditions usingthe
WHENEVER
command.
Detailed information about the error or warning can be obtained from the
sqlca
variable.
33.8.1. Setting Callbacks
One simple method to catch errors and warnings is to set a specific action to be executed whenever a
particular condition occurs. In general:
EXEC SQL WHENEVER
condition action
;
784
Chapter 33. ECPG - Embedded SQL in C
condition
can be one of the following:
SQLERROR
Thespecifiedactionis calledwhenever an error occursduring the executionof anSQL statement.
SQLWARNING
The specified action is called whenever a warning occurs during the execution of an SQL state-
ment.
NOT FOUND
The specified action is called whenever an SQL statement retrieves or affects zero rows. (This
conditionis not an error, but you might be interested in handling it specially.)
action
can be one of the following:
CONTINUE
This effectively means that the condition is ignored. This is the default.
GOTO
label
GO TO
label
Jump to the specified label (using a C
goto
statement).
SQLPRINT
Print a message to standard error. This is useful for simple programs or during prototyping. The
details of the message cannot be configured.
STOP
Call
exit(1)
,which will terminate the program.
DO BREAK
Execute the C statement
break
.This should only be used in loops or
switch
statements.
CALL
name
(
args
)
DO
name
(
args
)
Call the specified C functions with the specified arguments.
The SQL standard only provides for the actions
CONTINUE
and
GOTO
(and
GO TO
).
Here is an example that you might want to use in a simple program. It prints a simple message when
awarning occurs and aborts the program when an error happens:
EXEC SQL WHENEVER SQLWARNING SQLPRINT;
EXEC SQL WHENEVER SQLERROR STOP;
The statement
EXEC SQL WHENEVER
is a directive of the SQL preprocessor, not a C statement. The
error or warning actions that itsets apply toallembedded SQL statements that appear below the point
where the handler is set, unless a different action was set for the same condition between the first
EXEC SQL WHENEVER
and the SQL statement causingthe condition, regardless of the flowof control
in the C program. So neither of the two following C program excerpts will have the desired effect:
/
*
*
WRONG
*
/
785
Chapter 33. ECPG - Embedded SQL in C
int main(int argc, char
*
argv[])
{
...
if (verbose) {
EXEC SQL WHENEVER SQLWARNING SQLPRINT;
}
...
EXEC SQL SELECT ...;
...
}
/
*
*
WRONG
*
/
int main(int argc, char
*
argv[])
{
...
set_error_handler();
...
EXEC SQL SELECT ...;
...
}
static void set_error_handler(void)
{
EXEC SQL WHENEVER SQLERROR STOP;
}
33.8.2. sqlca
For more powerful error handling, the embedded SQL interface provides a global variable with the
name
sqlca
(SQL communicationarea) that has the following structure:
struct
{
char sqlcaid[8];
long sqlabc;
long sqlcode;
struct
{
int sqlerrml;
char sqlerrmc[SQLERRMC_LEN];
} sqlerrm;
char sqlerrp[8];
long sqlerrd[6];
char sqlwarn[8];
char sqlstate[5];
} sqlca;
(In a multithreaded program, every thread automatically gets its own copy of
sqlca
.This works
similarly to the handling of the standard C global variable
errno
.)
sqlca
covers both warnings and errors. If multiple warnings or errors occur during the execution of
astatement, then
sqlca
will onlycontain information about the last one.
786
Chapter 33. ECPG - Embedded SQL in C
If no error occurred in the last SQL statement,
sqlca.sqlcode
will be 0 and
sqlca.sqlstate
will be
"00000"
. If a warning or error occurred, then
sqlca.sqlcode
will be negative and
sqlca.sqlstate
will be different from
"00000"
. A positive
sqlca.sqlcode
indicates a
harmless condition, such as that the last query returned zero rows.
sqlcode
and
sqlstate
are two
different error code schemes; details appear below.
If the last SQLstatementwas successful, then
sqlca.sqlerrd[1]
contains theOIDof the processed
row, if applicable, and
sqlca.sqlerrd[2]
contains the number of processed or returned rows, if
applicable to the command.
In case of an error or warning,
sqlca.sqlerrm.sqlerrmc
will contain a string that describes the
error. The field
sqlca.sqlerrm.sqlerrml
contains the length of the error message that is stored
in
sqlca.sqlerrm.sqlerrmc
(the result of
strlen()
,not reallyinteresting for a C programmer).
Note that some messages are toolong to fit in the fixed-size
sqlerrmc
array; they will be truncated.
Incase of a warning,
sqlca.sqlwarn[2]
is setto
W
.(Inallother cases, itissettosomething different
from
W
.) If
sqlca.sqlwarn[1]
is set to
W
,then a value was truncated when it was stored in a host
variable.
sqlca.sqlwarn[0]
is set to
W
if any of the other elements are set to indicate a warning.
The fields
sqlcaid
,
sqlcabc
,
sqlerrp
,and the remaining elements of
sqlerrd
and
sqlwarn
currently contain no useful information.
The structure
sqlca
is not defined in the SQL standard, but is implemented in several other SQL
database systems. Thedefinitions are similar atthe core, butif you wanttowriteportable applications,
then you should investigate the different implementations carefully.
Here is one example that combines the use of
WHENEVER
and
sqlca
,printing out the contents of
sqlca
when an error occurs. This is perhaps useful for debuggingor prototyping applications, before
installing a more “user-friendly” error handler.
EXEC SQL WHENEVER SQLERROR CALL print_sqlca();
void
print_sqlca()
{
fprintf(stderr, "==== sqlca ====\n");
fprintf(stderr, "sqlcode: %ld\n", sqlca.sqlcode);
fprintf(stderr, "sqlerrm.sqlerrml: %d\n", sqlca.sqlerrm.sqlerrml);
fprintf(stderr, "sqlerrm.sqlerrmc: %s\n", sqlca.sqlerrm.sqlerrmc);
fprintf(stderr, "sqlerrd: %ld %ld %ld %ld %ld %ld\n", sqlca.sqlerrd[0],sqlca.sqlerrd[1],sqlca.sqlerrd[2],
sqlca.sqlerrd[3],sqlca.sqlerrd[4],sqlca.sqlerrd[5]);
fprintf(stderr, "sqlwarn: %d %d %d %d %d %d %d %d\n", sqlca.sqlwarn[0], sqlca.sqlwarn[1], sqlca.sqlwarn[2],
sqlca.sqlwarn[3], sqlca.sqlwarn[4], sqlca.sqlwarn[5],
sqlca.sqlwarn[6], sqlca.sqlwarn[7]);
fprintf(stderr, "sqlstate: %5s\n", sqlca.sqlstate);
fprintf(stderr, "===============\n");
}
The result could look as follows (here an error due to a misspelled table name):
==== sqlca ====
sqlcode: -400
sqlerrm.sqlerrml: 49
sqlerrm.sqlerrmc: relation "pg_databasep" does not exist on line 38
sqlerrd: 0 0 0 0 0 0
sqlwarn: 0 0 0 0 0 0 0 0
sqlstate: 42P01
===============
787
Documents you may be interested
Documents you may be interested