pdf viewer in asp net c# : Acrobat insert image into pdf SDK Library API .net asp.net wpf sharepoint postgresql-9.4-A475-part3000

Chapter 31. libpq - C Library
The client is responsible for formatting displayed information to meet its needs; in particular
it should break long lines as needed. Newline characters appearing in the error message fields
should be treated as paragraph breaks, not line breaks.
Errors generated internally by libpq will have severity and primary message, but typically no
other fields. Errors returned by a pre-3.0-protocol server will include severity and primary mes-
sage, and sometimes a detail message, but no other fields.
Note that error fields are only available from
PGresult
objects, not
PGconn
objects; there is no
PQerrorField
function.
PQclear
Frees the storage associated with a
PGresult
. Every command result should be freed via
PQclear
when it is no longer needed.
void PQclear(PGresult
*
res);
You can keep a
PGresult
object around for as long as you need it; it does not go away when
you issue a new command, nor even if you close the connection. To get rid of it, you must call
PQclear
.Failure to do this will result in memory leaks in your application.
31.3.2. Retrieving Query Result Information
These functions are used to extract information from a
PGresult
object that represents a successful
query result (that is, one that has status
PGRES_TUPLES_OK
or
PGRES_SINGLE_TUPLE
). They can
also be used to extract information from a successful Describe operation: a Describe’s result has all
the same column information that actual execution of the query would provide, but it has zero rows.
For objects with other status values, these functions will act as though the result has zero rows and
zero columns.
PQntuples
Returns thenumber of rows (tuples) inthequery result. Because it returns aninteger result, large
result sets might overflow the return value on 32-bit operating systems.
int PQntuples(const PGresult
*
res);
PQnfields
Returns the number of columns (fields) in each row of the query result.
int PQnfields(const PGresult
*
res);
PQfname
Returns the column name associated with the given column number. Column numbers start at
0. The caller should not free the result directly. It will be freed when the associated
PGresult
handle is passed to
PQclear
.
char
*
PQfname(const PGresult
*
res,
int column_number);
NULL
is returned if the column number is out of range.
PQfnumber
Returns the column number associated with the given column name.
int PQfnumber(const PGresult
*
res,
const char
*
column_name);
678
Acrobat insert image into pdf - 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
how to add picture to pdf; how to add image to pdf document
Acrobat insert image into pdf - 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
add image to pdf form; add picture to pdf preview
Chapter 31. libpq - C Library
-1 is returned if the given name does not match any column.
The given name is treated like an identifier in an SQL command, that is, it is downcased unless
double-quoted. For example, given a query result generated from the SQL command:
SELECT 1 AS FOO, 2 AS "BAR";
we would have the results:
PQfname(res, 0)
foo
PQfname(res, 1)
BAR
PQfnumber(res, "FOO")
0
PQfnumber(res, "foo")
0
PQfnumber(res, "BAR")
-1
PQfnumber(res, "\"BAR\"")
1
PQftable
Returns the OID of the table from which the given column was fetched. Column numbers start
at 0.
Oid PQftable(const PGresult
*
res,
int column_number);
InvalidOid
is returned if the column number is out of range, or if the specified column is not
asimple reference to a table column, or when using pre-3.0 protocol. You can query the system
table
pg_class
todetermine exactly which table is referenced.
The type
Oid
and the constant
InvalidOid
will be defined when you include the libpq header
file. They will both be some integer type.
PQftablecol
Returns the column number (within its table) of the columnmaking up the specified query result
column. Query-result column numbers start at 0, but table columns have nonzero numbers.
int PQftablecol(const PGresult
*
res,
int column_number);
Zero is returned if the column number is out of range, or if the specified column is not a simple
reference to a table column, or when using pre-3.0 protocol.
PQfformat
Returns the format code indicating the format of the given column. Column numbers start at 0.
int PQfformat(const PGresult
*
res,
int column_number);
Format code zero indicates textual data representation, while format code one indicates binary
representation. (Other codes are reserved for future definition.)
PQftype
Returns the data type associated with the given column number. The integer returned is the
internal OID number of the type. Column numbers start at 0.
Oid PQftype(const PGresult
*
res,
int column_number);
You can query the system table
pg_type
to obtain the names and properties of
the various data types. The OIDs of the built-in data types are defined in the file
src/include/catalog/pg_type.h
in the source tree.
679
.NET PDF Document Viewing, Annotation, Conversion & Processing
Convert image files to PDF. File & Page Process. Annotate & Comment. Add, insert PDF native annotations to PDF file. Support for all the print modes in Acrobat PDF
add picture pdf; add png to pdf acrobat
C# PDF Converter Library SDK to convert PDF to other file formats
without using other external third-party dependencies like Adobe Acrobat. demo code for PDF to TIFF image conversion may directly copy and paste it into your C#
adding an image to a pdf in acrobat; add jpg to pdf document
Chapter 31. libpq - C Library
PQfmod
Returns the type modifier of the column associated with the given column number. Column
numbers start at 0.
int PQfmod(const PGresult
*
res,
int column_number);
The interpretation of modifier values is type-specific; they typically indicate precision or size
limits. The value -1 is used to indicate “no information available”. Most data types do not use
modifiers, in which case the value is always -1.
PQfsize
Returns the size in bytes of the columnassociated with the given column number. Column num-
bers start at 0.
int PQfsize(const PGresult
*
res,
int column_number);
PQfsize
returns the space allocated for this column in a database row, in other words the size
of the server’s internal representation of the data type. (Accordingly, it is not really very useful
to clients.) A negative value indicates the data type is variable-length.
PQbinaryTuples
Returns 1 if the
PGresult
contains binary data and 0 if it contains text data.
int PQbinaryTuples(const PGresult
*
res);
This functionis deprecated(exceptfor its use inconnectionwith
COPY
), because it is possible for
asingle
PGresult
to contain text data in some columns and binary data in others.
PQfformat
is preferred.
PQbinaryTuples
returns 1 only if all columns of the result are binary (format 1).
PQgetvalue
Returns a single field value of one row of a
PGresult
.Row and column numbers start at 0. The
caller should not free the result directly. It will be freed when the associated
PGresult
handle
is passed to
PQclear
.
char
*
PQgetvalue(const PGresult
*
res,
int row_number,
int column_number);
For data in text format, the value returned by
PQgetvalue
is a null-terminated character string
representation of the field value. For data in binary format, the value is in the binary representa-
tion determined by the data type’s
typsend
and
typreceive
functions. (The value is actually
followed by a zero byte in this case too, but that is not ordinarily useful, since the value is likely
to contain embedded nulls.)
Anemptystringis returnedif thefield value is null. See
PQgetisnull
to distinguish nullvalues
from empty-string values.
The pointer returned by
PQgetvalue
points to storage that is part of the
PGresult
structure.
One should not modify the data it points to, and one must explicitly copy the data into other
storage if it is to be used past the lifetime of the
PGresult
structure itself.
PQgetisnull
Tests a field for a null value. Row and column numbers start at 0.
int PQgetisnull(const PGresult
*
res,
int row_number,
int column_number);
680
C# powerpoint - PowerPoint Conversion & Rendering in C#.NET
using other external third-party dependencies like Adobe Acrobat. demo code for PowerPoint to TIFF image conversion may directly copy and paste it into your C#
adding image to pdf form; add jpg signature to pdf
C# Word - Word Conversion in C#.NET
using other external third-party dependencies like Adobe Acrobat. C# demo code for Word to TIFF image conversion You may directly copy and paste it into your C#
how to add an image to a pdf file; how to add image to pdf reader
Chapter 31. libpq - C Library
This function returns 1 if the field is null and 0 if it contains a non-null value. (Note that
PQgetvalue
will return an empty string, not a null pointer, for a null field.)
PQgetlength
Returns the actual length of a field value in bytes. Rowand column numbers start at 0.
int PQgetlength(const PGresult
*
res,
int row_number,
int column_number);
This is the actual data length for the particular data value, that is, the size of the object pointed
to by
PQgetvalue
.For text data format this is the same as
strlen()
.For binary format this is
essential information. Note that one shouldnot relyon
PQfsize
to obtainthe actualdata length.
PQnparams
Returns the number of parameters of a prepared statement.
int PQnparams(const PGresult
*
res);
This function is only useful when inspecting the result of
PQdescribePrepared
.For other
types of queries it will return zero.
PQparamtype
Returns the data type of the indicated statement parameter. Parameter numbers start at 0.
Oid PQparamtype(const PGresult
*
res, int param_number);
This function is only useful when inspecting the result of
PQdescribePrepared
.For other
types of queries it will return zero.
PQprint
Prints out all the rows and, optionally, the column names to the specified output stream.
void PQprint(FILE
*
fout,
/
*
output stream
*
/
const PGresult
*
res,
const PQprintOpt
*
po);
typedef struct
{
pqbool
header;
/
*
print output field headings and row count
*
/
pqbool
align;
/
*
fill align the fields
*
/
pqbool
standard;
/
*
old brain dead format
*
/
pqbool
html3;
/
*
output HTML tables
*
/
pqbool
expanded;
/
*
expand tables
*
/
pqbool
pager;
/
*
use pager for output if needed
*
/
char
*
fieldSep;
/
*
field separator
*
/
char
*
tableOpt;
/
*
attributes for HTML table element
*
/
char
*
caption;
/
*
HTML table caption
*
/
char
**
fieldName; /
*
null-terminated array of replacement field names
*
/
} PQprintOpt;
This function was formerly used by psql to print query results, but this is no longer the case.
Note that it assumes all the data is in text format.
31.3.3. Retrieving Other Result Information
These functions are used to extract other information from
PGresult
objects.
681
C# Windows Viewer - Image and Document Conversion & Rendering in
without using other external third-party dependencies like Adobe Acrobat. Image and Document Conversion Supported by Windows Viewer. Convert to PDF.
how to add image to pdf in preview; pdf insert image
VB.NET PDF: How to Create Watermark on PDF Document within
PDF Watermark Creator, users need no external application plugin, like Adobe Acrobat. to PDF. Besides text, users also can insert a target image, like company
how to add an image to a pdf in reader; add signature image to pdf
Chapter 31. libpq - C Library
PQcmdStatus
Returns the command status tag from the SQL command that generated the
PGresult
.
char
*
PQcmdStatus(PGresult
*
res);
Commonly this is justthe name of the command, but itmightinclude additional data such as the
number of rows processed. The caller shouldnotfree the result directly. It willbe freed when the
associated
PGresult
handle is passed to
PQclear
.
PQcmdTuples
Returns the number of rows affected by the SQL command.
char
*
PQcmdTuples(PGresult
*
res);
This function returns a string containing the number of rows affected by the SQL statement
that generated the
PGresult
. This function can only be used following the execution of a
SELECT
,
CREATE TABLE AS
,
INSERT
,
UPDATE
,
DELETE
,
MOVE
,
FETCH
, or
COPY
statement,
or an
EXECUTE
of a prepared query that contains an
INSERT
,
UPDATE
,or
DELETE
statement. If
the command that generated the
PGresult
was anything else,
PQcmdTuples
returns an empty
string. The caller should not free the return value directly. It will be freed when the associated
PGresult
handle is passed to
PQclear
.
PQoidValue
Returns the OID of the inserted row, if the SQL command was an
INSERT
that inserted exactly
one row into a table that has OIDs, or a
EXECUTE
of a prepared query containing a suitable
INSERT
statement. Otherwise, this function returns
InvalidOid
.This function will also return
InvalidOid
if the table affected by the
INSERT
statement does not contain OIDs.
Oid PQoidValue(const PGresult
*
res);
PQoidStatus
This function is deprecated in favor of
PQoidValue
and is not thread-safe. It returns a string
with the OID of the inserted row, while
PQoidValue
returns the OID value.
char
*
PQoidStatus(const PGresult
*
res);
31.3.4. Escaping Strings for Inclusion in SQL Commands
PQescapeLiteral
char
*
PQescapeLiteral(PGconn
*
conn, const char
*
str, size_t length);
PQescapeLiteral
escapes a string for use within an SQL command. This is useful when in-
serting data values as literal constants in SQL commands. Certain characters (such as quotes
and backslashes) must be escaped to prevent them from being interpreted specially by the SQL
parser.
PQescapeLiteral
performs this operation.
PQescapeLiteral
returns an escaped version of the
str
parameter in memory allocated with
malloc()
. This memory should be freed using
PQfreemem()
when the result is no longer
needed. A terminating zero byte is not required, and should not be counted in
length
.(If a
terminating zero byte is found before
length
bytes are processed,
PQescapeLiteral
stops at
the zero; the behavior is thus rather like
strncpy
.) The return string has all special characters
replaced so that they can be properly processed by the PostgreSQL string literal parser. A termi-
nating zero byte is also added. The single quotes that must surround PostgreSQL string literals
are included in the result string.
On error,
PQescapeLiteral
returns
NULL
and a suitable message is stored in the
conn
object.
682
C# Excel - Excel Conversion & Rendering in C#.NET
using other external third-party dependencies like Adobe Acrobat. of C# demo code for Excel to TIFF image conversion may directly copy and paste it into your C#
add photo to pdf online; how to add a picture to a pdf file
VB.NET PowerPoint: VB Code to Draw and Create Annotation on PPT
with no more plug-ins needed like Acrobat or Adobe VB.NET PPT: VB Code to Add Embedded Image Object to VB.NET PPT: Insert and Customize Text Annotation on PPT
acrobat insert image into pdf; add photo to pdf in preview
Chapter 31. libpq - C Library
Tip: It is especially important todoproper escapingwhenhandlingstringsthat werereceived
from an untrustworthy source. Otherwise there is a security risk: you are vulnerable to “SQL
injection” attacks wherein unwanted SQL commands are fed to your database.
Note that it is not necessary nor correct to do escaping when a data value is passed as a separate
parameter in
PQexecParams
or its sibling routines.
PQescapeIdentifier
char
*
PQescapeIdentifier(PGconn
*
conn, const char
*
str, size_t length);
PQescapeIdentifier
escapes a string for use as an SQL identifier, such as a table, column,
or function name. This is useful when a user-suppliedidentifier might contain special characters
that would otherwise not be interpreted as part of the identifier by the SQL parser, or when the
identifier might contain upper case characters whose case should be preserved.
PQescapeIdentifier
returns a version of the
str
parameter escaped as an SQL identifier
in memory allocated with
malloc()
.This memory must be freed using
PQfreemem()
when
the result is no longer needed. A terminating zero byte is not required, and should not be
counted in
length
.(If a terminating zero byte is found before
length
bytes are processed,
PQescapeIdentifier
stops at the zero; the behavior is thus rather like
strncpy
.) The return
string has all special characters replaced so that it will be properly processed as an SQL identi-
fier. A terminating zero byte is also added. The return string will also be surrounded by double
quotes.
On error,
PQescapeIdentifier
returns
NULL
and a suitable message is stored in the
conn
object.
Tip: As with string literals, toprevent SQLinjectionattacks, SQL identifiers must be escaped
when they are received from an untrustworthy source.
PQescapeStringConn
size_t PQescapeStringConn(PGconn
*
conn,
char
*
to, const char
*
from, size_t length,
int
*
error);
PQescapeStringConn
escapes string literals, much like
PQescapeLiteral
. Unlike
PQescapeLiteral
, the caller is responsible for providing an appropriately sized buffer.
Furthermore,
PQescapeStringConn
does not generate the single quotes that must surround
PostgreSQL string literals; they should be provided in the SQL command that the result is
inserted into. The parameter
from
points to the first character of the string that is to be escaped,
and the
length
parameter gives the number of bytes in this string. A terminating zero byte is
not required, and should not be counted in
length
.(If a terminating zero byte is found before
length
bytes are processed,
PQescapeStringConn
stops at the zero; the behavior is thus
rather like
strncpy
.)
to
shall point to a buffer that is able to hold at least one more byte than
twice the value of
length
,otherwise the behavior is undefined. Behavior is likewise undefined
if the
to
and
from
strings overlap.
If the
error
parameter is not
NULL
,then
*
error
is set to zero on success, nonzero on error.
Presently the only possible error conditions involve invalid multibyte encoding in the source
string. The output string is still generated on error, but it can be expected that the server will
reject it as malformed. On error, a suitable message is stored in the
conn
object, whether or not
error
is
NULL
.
683
Chapter 31. libpq - C Library
PQescapeStringConn
returns the number of bytes written to
to
,notincluding the terminating
zero byte.
PQescapeString
PQescapeString
is an older, deprecated version of
PQescapeStringConn
.
size_t PQescapeString (char
*
to, const char
*
from, size_t length);
The only difference from
PQescapeStringConn
is that
PQescapeString
does not take
PGconn
or
error
parameters. Because of this, it cannot adjust its behavior depending on
the connection properties (such as character encoding) and therefore it might give the wrong
results. Also, it has no way to report error conditions.
PQescapeString
can be used safely in client programs that work with only one PostgreSQL
connection at a time (in this case it can find out what it needs to know “behind the scenes”). In
other contexts it is a securityhazard and should be avoided in favor of
PQescapeStringConn
.
PQescapeByteaConn
Escapes binary data for use within an SQL command with the type
bytea
. As with
PQescapeStringConn
,this is only used when inserting data directly into an SQL command
string.
unsigned char
*
PQescapeByteaConn(PGconn
*
conn,
const unsigned char
*
from,
size_t from_length,
size_t
*
to_length);
Certain byte values must be escaped when used as part of a
bytea
literal in an SQL statement.
PQescapeByteaConn
escapes bytes using either hexencodingor backslash escaping. See Sec-
tion 8.4 for more information.
The
from
parameter points to the first byte of the string that is to be escaped, and the
from_length
parameter gives the number of bytes in this binary string. (A terminating zero
byte is neither necessary nor counted.) The
to_length
parameter points to a variable that will
hold the resultant escaped string length. This result string length includes the terminating zero
byte of the result.
PQescapeByteaConn
returns an escaped version of the
from
parameter binary string in mem-
ory allocated with
malloc()
. This memory should be freed using
PQfreemem()
when the
result is no longer needed. The return string has all special characters replaced so that they can
be properly processed by the PostgreSQL string literal parser, and the
bytea
input function. A
terminating zero byte is also added. The single quotes that must surround PostgreSQL string
literals are not part of the result string.
On error, a null pointer is returned, and a suitable error message is stored in the
conn
object.
Currently, the only possible error is insufficient memory for the result string.
PQescapeBytea
PQescapeBytea
is an older, deprecated version of
PQescapeByteaConn
.
unsigned char
*
PQescapeBytea(const unsigned char
*
from,
size_t from_length,
size_t
*
to_length);
The only difference from
PQescapeByteaConn
is that
PQescapeBytea
does not take a
PGconn
parameter. Because of this,
PQescapeBytea
can only be used safely in client
programs that use a single PostgreSQL connection at a time (in this case it can find out what it
needs to know “behind the scenes”). It might give the wrong results if used in programs that use
multiple database connections (use
PQescapeByteaConn
in such cases).
684
Chapter 31. libpq - C Library
PQunescapeBytea
Converts a string representation of binary data into binary data — the reverse of
PQescapeBytea
. This is needed when retrieving
bytea
data in text format, but not when
retrieving it in binary format.
unsigned char
*
PQunescapeBytea(const unsigned char
*
from, size_t
*
to_length);
The
from
parameter points to a string such as might be returned by
PQgetvalue
when applied
to a
bytea
column.
PQunescapeBytea
converts this string representation into its binary rep-
resentation. It returns a pointer to a buffer allocated with
malloc()
,or
NULL
on error, and puts
the size of the buffer in
to_length
.The result must be freed using
PQfreemem
when it is no
longer needed.
This conversion is not exactly the inverse of
PQescapeBytea
,because the stringis not expected
to be “escaped” when received from
PQgetvalue
.In particular this means there is no need for
string quotingconsiderations, and sono needfor a
PGconn
parameter.
31.4. Asynchronous Command Processing
The
PQexec
function is adequate for submitting commands in normal, synchronous applications. It
has a few deficiencies, however, that can be of importance to some users:
PQexec
waits for thecommandtobe completed. Theapplicationmighthaveother worktodo(such
as maintaining a user interface), in which case it won’t want to block waiting for the response.
Since the execution of the client application is suspended while it waits for the result, it is hard for
the application to decide that it would like to try to cancel the ongoing command. (It can be done
from a signal handler, but not otherwise.)
PQexec
can return only one
PGresult
structure. If the submitted command string contains multi-
ple SQL commands, all but the last
PGresult
are discarded by
PQexec
.
PQexec
always collects the command’s entire result, buffering it in a single
PGresult
.While this
simplifies error-handling logic for the application, itcan be impracticalfor results containing many
rows.
Applications that do not like these limitations can instead use the underlying functions that
PQexec
is built from:
PQsendQuery
and
PQgetResult
.There are also
PQsendQueryParams
,
PQsendPrepare
,
PQsendQueryPrepared
,
PQsendDescribePrepared
,
and
PQsendDescribePortal
, which can be used with
PQgetResult
to duplicate the
functionality of
PQexecParams
,
PQprepare
,
PQexecPrepared
,
PQdescribePrepared
, and
PQdescribePortal
respectively.
PQsendQuery
Submits a command to the server without waitingfor the result(s). 1 is returned if the command
was successfully dispatched and 0 if not (in which case, use
PQerrorMessage
to get more
information about the failure).
int PQsendQuery(PGconn
*
conn, const char
*
command);
685
Chapter 31. libpq - C Library
After successfully calling
PQsendQuery
,call
PQgetResult
one or more times to obtain the
results.
PQsendQuery
cannot be called again (on the same connection) until
PQgetResult
has
returned a null pointer, indicating that the commandis done.
PQsendQueryParams
Submits a command and separate parameters to the server without waiting for the result(s).
int PQsendQueryParams(PGconn
*
conn,
const char
*
command,
int nParams,
const Oid
*
paramTypes,
const char
*
const
*
paramValues,
const int
*
paramLengths,
const int
*
paramFormats,
int resultFormat);
This is equivalent to
PQsendQuery
except that query parameters can be specified separately
from thequerystring. Thefunction’s parameters are handled identically to
PQexecParams
.Like
PQexecParams
,it will not work on 2.0-protocol connections, and it allows only one command
in the query string.
PQsendPrepare
Sends a request to create a prepared statement with the given parameters, without waiting for
completion.
int PQsendPrepare(PGconn
*
conn,
const char
*
stmtName,
const char
*
query,
int nParams,
const Oid
*
paramTypes);
This is an asynchronous version of
PQprepare
:it returns 1 if it was able to dispatch the re-
quest, and 0 if not. After a successful call, call
PQgetResult
to determine whether the server
successfully created the prepared statement. The function’s parameters are handled identically
to
PQprepare
.Like
PQprepare
,it will not work on 2.0-protocol connections.
PQsendQueryPrepared
Sends a request to execute a prepared statement with given parameters, without waiting for the
result(s).
int PQsendQueryPrepared(PGconn
*
conn,
const char
*
stmtName,
int nParams,
const char
*
const
*
paramValues,
const int
*
paramLengths,
const int
*
paramFormats,
int resultFormat);
This is similar to
PQsendQueryParams
,but the commandtobe executedis specifiedbynaming
apreviously-prepared statement, instead of giving a query string. The function’s parameters
are handled identically to
PQexecPrepared
.Like
PQexecPrepared
,it will not work on 2.0-
protocol connections.
PQsendDescribePrepared
Submits a request to obtain information about the specified prepared statement, without waiting
for completion.
int PQsendDescribePrepared(PGconn
*
conn, const char
*
stmtName);
This is an asynchronous version of
PQdescribePrepared
: it returns 1 if it was able to
dispatch the request, and 0 if not. After a successful call, call
PQgetResult
to obtain the
686
Chapter 31. libpq - C Library
results. The function’s parameters are handled identically to
PQdescribePrepared
. Like
PQdescribePrepared
,it will not work on 2.0-protocol connections.
PQsendDescribePortal
Submits a request to obtain information about the specified portal, without waiting for comple-
tion.
int PQsendDescribePortal(PGconn
*
conn, const char
*
portalName);
This is anasynchronous versionof
PQdescribePortal
:itreturns 1if itwas able todispatchthe
request, and 0 if not. After a successful call, call
PQgetResult
to obtain the results. The func-
tion’s parameters are handled identically to
PQdescribePortal
.Like
PQdescribePortal
,it
will not work on 2.0-protocol connections.
PQgetResult
Waits for the next result from a prior
PQsendQuery
,
PQsendQueryParams
,
PQsendPrepare
,
PQsendQueryPrepared
,
PQsendDescribePrepared
, or
PQsendDescribePortal
call,
and returns it. A null pointer is returned when the command is complete and there will be no
more results.
PGresult
*
PQgetResult(PGconn
*
conn);
PQgetResult
must be called repeatedly until it returns a null pointer, indicating that the com-
mand is done. (If called when no command is active,
PQgetResult
will just return a null
pointer at once.) Each non-null result from
PQgetResult
should be processed using the same
PGresult
accessor functions previously described. Don’t forget to free each result object with
PQclear
when done with it. Note that
PQgetResult
will block only if a command is active
andthe necessary response data has not yet been read by
PQconsumeInput
.
Note: Even when
PQresultStatus
indicates a fatal error,
PQgetResult
should be called
until it returns a null pointer, to allow libpq to process the error information completely.
Using
PQsendQuery
and
PQgetResult
solves one of
PQexec
’s problems: If a command string
contains multiple SQL commands, the results of those commands can be obtainedindividually. (This
allows a simple form of overlapped processing, by the way: the client can be handling the results of
one command while the server is still workingon later queries in the same command string.)
Another frequently-desired feature that can be obtained with
PQsendQuery
and
PQgetResult
is
retrieving large query results a row at a time. This is discussed in Section 31.5.
By itself, calling
PQgetResult
will still cause the client to block until the server completes the next
SQL command. This can be avoided by proper use of two more functions:
PQconsumeInput
If input is available from the server, consume it.
int PQconsumeInput(PGconn
*
conn);
PQconsumeInput
normallyreturns 1 indicating“no error”, butreturns 0 if there was somekind
of trouble (in which case
PQerrorMessage
can be consulted). Note that the result does not say
whether any input data was actually collected. After calling
PQconsumeInput
,the application
can check
PQisBusy
and/or
PQnotifies
to see if their state has changed.
687
Documents you may be interested
Documents you may be interested